从一个df提取列的子集,然后从另一个df粘贴到行中

时间:2019-12-05 12:42:28

标签: pandas row transpose

df1

First Name    Last Name         
1. John       Smith              
2. Mary       Brohowski           
3. Aristidis  Papageorgopoulos   
4. James      Watss               
5. Kid        Red               

df2

                  1.      2.      3.         4.    5.     6.    7. 
First Name        Marty   Sandy   Parry      May   Manny  Rudy  Wesley 
Last Name         Smith   Kevin   Brohowski  Dave  Garido Red   Redknap

我如何用df1 Name列中的索引1:5替换df2中First Name 2:5列,所以输出将是:

df2

              1.      2.          3.                4.      5.     6.  7.
First Name    John    Mary        Aristidis         James   Kid   Rudy Wesle
Last Name     Smith   Brohowski   Papageorgopoulos  Watss   Red   Red  Redkn

我尝试过:

df1[['First Name']].combine_first(df2) 

就像我对列所做的那样,但这不起作用

2 个答案:

答案 0 :(得分:2)

首先请确保数据框1 索引的类型与数据框2 的类型相匹配:

df2.columns=df2.columns.astype(float)
df1.index=df1.index.astype(float)

然后,您只需要DataFrame.update(请注意,参数覆盖默认为 True )+ DataFrame.transpose

df2.update(df1.T)
print(df2)

             1.0        2.0               3.0    4.0  5.0   6.0      7.0
First Name   John       Mary         Aristidis  James  Kid  Rudy   Wesley
Last Name   Smith  Brohowski  Papageorgopoulos  Watss  Red   Red  Redknap

答案 1 :(得分:1)

使用DataFrame.combine_first就像您只想将第一个DataFrame的值放DataFrame.T一样:

#if necessary
#df2 = df2.rename(columns=float)
#df1 = df1.rename(index=float)

df = df1.T.combine_first(df2)
print (df)
              1.0        2.0               3.0    4.0  5.0   6.0      7.0
First Name   John       Mary         Aristidis  James  Kid  Rudy   Wesley
Last Name   Smith  Brohowski  Papageorgopoulos  Watss  Red   Red  Redknap

使用DataFrame.iloc的第一个解决方案-python中只有第一个值不是1,而是0,所以:

df2.iloc[0, 0:5] = df1.iloc[0:5, 0]
df2.iloc[1, 1:5] = df1.iloc[1:5, 1]
print (df2)
               1.         2.                3.     4.   5.    6.       7.
First Name   John       Mary         Aristidis  James  Kid  Rudy   Wesley
Last Name   Smith  Brohowski  Papageorgopoulos  Watss  Red   Red  Redknap