如何循环两个数据帧的列,按键分组并执行计算

2024-09-26 22:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,大约有300列,包含干预前后的分数。我需要计算每个有一个ID的参与者在每个列中的前和后之间的差异。作为一个小例子,我有:

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元素的缘故,我一直在努力

非常感谢您的帮助


Tags: 数据id差异参与者pre分数例子df1
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:54

你能做到吗

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']

或者构建列,将它们与sub一起放置。您可以在columns=中使用['col1','col2'],但在此处使用列名,而不是col1,col2:

df2.drop(columns=['col1', 'col2']).sub(df1.drop(columns=['col1', 'col2'])) 

我希望其中一个能帮上忙

相关问题 更多 >

    热门问题