我是Python和Pandas的新手,有人可以通过以下报告帮助我。
我想报告N列的差异并创建具有差异值的新列,是否可以将其设置为动态,因为我有超过30列。 (列是固定数字,行值可以更改)
A和B可以是Alpha数字
答案 0 :(得分:2)
#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