Python 3.x 2个数据帧的多列差异
我是Python和Pandas的新手,有人能帮我写下面的报告吗 我想报告N列的差异,并创建具有差异值的新列,是否可以使其成为动态的,因为我有30多列。(列是固定数字,行值可以更改) A和B可以是字母数字 用于数据帧的差异:Python 3.x 2个数据帧的多列差异,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我是Python和Pandas的新手,有人能帮我写下面的报告吗 我想报告N列的差异,并创建具有差异值的新列,是否可以使其成为动态的,因为我有30多列。(列是固定数字,行值可以更改) A和B可以是字母数字 用于数据帧的差异: #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
#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
与用于数据帧的差异:
#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
IIUC
IIUC
'ID'
列实际上应该是一个索引。看看为什么这是个好主意
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
'ID'
列实际上应该是一个索引。看看为什么这是个好主意
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
为什么列
B
中的预期输出是0
?很抱歉,我现在更改了它。感谢您在B
列中找到预期输出的原因是0
?很抱歉,我现在更改了它。非常感谢您的帮助,如果列是字符串,最后一件事是什么?当我从Access DB查询这些数据时。您需要df1=df1.astype(int)
和df2=df2.astype(int)
之前。非常感谢您的帮助,如果列是字符串,最后一件事是什么?当我从Access DB查询这些数据时,您需要在查询之前使用df1=df1.astype(int)
和df2=df2.astype(int)
。