2个Pandas DataFrame的多列差异

时间:2018-02-20 16:21:43

标签: python-3.x pandas dataframe

我是Python和Pandas的新手,有人可以通过以下报告帮助我。

我想报告N列的差异并创建具有差异值的新列,是否可以将其设置为动态,因为我有超过30列。 (列是固定数字,行值可以更改)

A和B可以是Alpha数字

enter image description here

3 个答案:

答案 0 :(得分:2)

joinsub一起使用,以区别DataFrame s:

#if columns are strings, first cast it
df1 = df1.astype(int)
df2 = df2.astype(int)

#if first columns are not indices
#df1 = df1.set_index('ID')
#df2 = df2.set_index('ID')

df = df1.join(df2.sub(df1).add_prefix('sum'))
print (df)
     A    B  sumA  sumB
ID                     
0   10  2.0     5   3.0
1   11  3.0     6   5.0
2   12  4.0     7   5.0

或类似的:

df = df1.join(df2.sub(df1), rsuffix='sum')
print (df)
     A    B  Asum  Bsum
ID                     
0   10  2.0     5   3.0
1   11  3.0     6   5.0
2   12  4.0     7   5.0

<强>详细

print (df2.sub(df1))
    A    B
ID        
0   5  3.0
1   6  5.0
2   7  5.0

答案 1 :(得分:2)

IIUC

df1[['C','D']]=(df2-df1)[['A','B']]
df1
Out[868]: 
   ID   A    B  C    D
0   0  10  2.0  5  3.0
1   1  11  3.0  6  5.0
2   2  12  4.0  7  5.0
df1.assign(B=0)
Out[869]: 
   ID   A  B  C    D
0   0  10  0  5  3.0
1   1  11  0  6  5.0
2   2  12  0  7  5.0

答案 2 :(得分:2)

'ID'列应该是一个索引。请参阅the Pandas tutorial on indexing了解这是一个好主意的原因。

df1 = df1.set_index('ID')
df2 = df2.set_index('ID')

df = df1.copy()
df[['C', 'D']] = df2 - df1
df['B'] = 0

print(df)

输出

     A  B  C    D
ID               
0   10  0  5  3.0
1   11  0  6  5.0
2   12  0  7  5.0