首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何循环两个数据帧的列,group by key并执行计算

如何循环两个数据帧的列,group by key并执行计算
EN

Stack Overflow用户
提问于 2019-11-27 02:07:06
回答 1查看 43关注 0票数 1

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

代码语言:javascript
运行
复制
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,并从抑郁中减去。

代码语言:javascript
运行
复制
s = df1.groupby('ID')['DEPRESSION'].sum()

df2['DEPRESSION'] = df2['DEPRESSION'] - df2['ID'].map(s).fillna(0)

这给了我:

代码语言:javascript
运行
复制
    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元素(我想)而遇到了困难。

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 02:21:43

你能做到吗?

代码语言:javascript
运行
复制
newdf = df2.sub(df1, fill_value=0) 
newdf['ID'] = df1['ID'] 

您也可以通过以下两种方式完成此操作:

一个接一个

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
df2.drop(columns=['col1', 'col2']).sub(df1.drop(columns=['col1', 'col2'])) 

我希望其中的一个能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59056986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档