我有一个如下所示的数据框:
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 sum
在axis=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/