我有两个数据帧,大约300列,其中包含干预前和干预后的分数。我需要在每一列中为每个只有一个ID的参与者计算pre和post之间的差异。
Pre-intervention:
ID DEPRESSION ANXIETY COGNITION
0 001 10 2 6
1 002 15 12 -3
2 003 14 -2 6
3 004 14 1 2
Post-intervention:
ID DEPRESSION ANXIETY COGNITION
0 001 9 3 10
1 002 6 -5 2
2 003 14 8 -3
3 004 2 11 2
我使用下面的代码(改编自Using two dataframes to calculate final value pandas),它创建了一个序列映射ID到抑郁的和,然后将这些和映射到df1中的ID,并从抑郁中减去。
s = df1.groupby('ID')['DEPRESSION'].sum()
df2['DEPRESSION'] = df2['DEPRESSION'] - df2['ID'].map(s).fillna(0)
这给了我:
ID DEPRESSION ANXIETY COGNITION
0 001 -1 3 10
1 002 -9 -5 2
2 003 0 8 -3
3 004 -12 11 2
即抑郁列中的差异。我不知道如何将它应用到我的数据帧中的每一列。我曾尝试过在列名上编写一个for循环,但由于groupby
元素(我想)而遇到了困难。
非常感谢您的帮助。
发布于 2019-11-27 02:21:43
你能做到吗?
newdf = df2.sub(df1, fill_value=0)
newdf['ID'] = df1['ID']
您也可以通过以下两种方式完成此操作:
一个接一个
newdf['ID'] = df1['ID']
newdf['DEPRESSION'] = df2['DEPRESSION'] - df1['DEPRESSION']
newdf['ANXIETY'] = df2['ANXIETY'] - df1['ANXIETY']
newdf['COGNITION'] = df2['COGNITION'] - df1['COGNITION']
或者建造柱子,丢弃它们,和潜艇一起。您可以在columns=中使用'col1','col2‘,但此处使用您的列名,而不是col1,col2:
df2.drop(columns=['col1', 'col2']).sub(df1.drop(columns=['col1', 'col2']))
我希望其中的一个能有所帮助。
https://stackoverflow.com/questions/59056986
复制相似问题