python - 如何对 pandas 中的相同列(按后缀区分)求和?

标签 python pandas

我有一个如下所示的数据框:

total_customers     total_customer_2021-03-31  total_purchases    total_purchases_2021-03-31
1                   10                          4                  6
3                   14                          3                  2

现在,我想按行对除后缀之外相同的列进行求和。即预期输出是:

total_customers      total_purchases   
11                   10                          
17                   5                          

我无法手动执行此操作的问题是因为我有 100 多个列对,所以我需要一种有效的方法来执行此操作。此外,列的顺序也是不可预测的。你有什么建议吗? 谢谢!

最佳答案

我们需要以某种方式获得 Index列,因此成对的列共享相同的名称,那么我们可以 groupby sumaxis=1上:

cols = pd.Index(['total_customers', 'total_customers',
                 'total_purchases', 'total_purchases'])

result_df = df.groupby(cols, axis=1).sum()

通过所示示例,我们可以 str.replace可选的 s,后跟下划线,后跟日期格式(四个数字-两个数字-两个数字)和一个 s。此模式可能需要根据实际的列名称进行修改:

cols = df.columns.str.replace(r's?_\d{4}-\d{2}-\d{2}$', 's', regex=True)
result_df = df.groupby(cols, axis=1).sum()

result_df:

   total_customers  total_purchases
0               11               10
1               17                5

设置和导入:

import pandas as pd

df = pd.DataFrame({
    'total_customers': [1, 3],
    'total_customer_2021-03-31': [10, 14],
    'total_purchases': [4, 3],
    'total_purchases_2021-03-31': [6, 2]
})

关于python - 如何对 pandas 中的相同列(按后缀区分)求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69533549/

相关文章:

python - 等待不终止的子进程的输出

python - 从具有重复键的字典列表中创建具有唯一键的字典列表

python - 使用映射转换 Pandas 数据框

python - python 中的数据帧操作

python - 我可以多次匹配正则表达式中的 or 表达式吗?

python - IPython:AMPL 必须指向什么才能运行 Gecode?

python - Pandas 使用日期列通过 .shift 创建天列

python - 将 pandas 数据帧传递给 fastapi

python - 如何在 python 中将列表列表转换为 Pandas 数据框

python - 将函数应用于我的数据框中的所有列