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

标签 python pandas

我有两个数据框,大约有 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 元素(我认为)而陷入困境。

非常感谢任何帮助。

最佳答案

你能做到吗?:

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

我希望其中之一能有所帮助

关于python - 如何循环遍历两个数据帧的列,按键分组并执行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59056986/

相关文章:

python - Tornado POST 请求的返回响应

Python smtplib 无法附加多个 mimetext

Python:如何找到一年中的第 n 个工作日?

Pythonize 函数应用于 pandas.Dataframe 对象中的列

python - Pandas 计算数据框每一列中的值

Python Pandas : error: missing ), 位置 2 处的未终止子模式

python - 我无法让 INSERT INTO tablename 等在 Python 3.8 pyodbc MySQL 中工作

Python 可嵌入 Zip 文件不在 sys.path 中包含 lib/site-packages

Python open ("x", "r") 函数,我怎么知道或控制文件应该有哪种编码?

python - Groupby,转换 - 恢复到原始表