我有一些从第 1 周到第 52 周的花费列 我希望分别对前 26 个和后 26 个求和。
我有以下内容:
column_names = [x for x in df.columns.values.tolist()
if x.startswith("spend_")
]
这为我提供了我感兴趣的所有列。
['花费_1', '花费_2', '花费_3', '花费_4', 'spend_5'...]
然后我可以总结如下:
df['pre_spend'] = df[column_names].sum(axis=1)
这给了我全部 52 周。
有没有一种简单的方法可以选择 1_26 和 27_52 并分别求和?
在 sas 中我会这样做: pre_spend = sum(of spend_1-spend_26);
最佳答案
我想你需要DataFrame.loc
按标签选择列:
a = df.loc[:, 'spend_1':'spend_26'].sum(axis=1)
b = df.loc[:, 'spend_27':'spend_52'].sum(axis=1)
示例:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,6))).add_prefix('spend_')
print (df)
spend_0 spend_1 spend_2 spend_3 spend_4 spend_5
0 8 8 3 7 7 0
1 4 2 5 2 2 2
2 1 0 8 4 0 9
3 6 2 4 1 5 3
4 4 4 3 7 1 1
print (df.loc[:, 'spend_0':'spend_2'])
spend_0 spend_1 spend_2
0 8 8 3
1 4 2 5
2 1 0 8
3 6 2 4
4 4 4 3
a = df.loc[:, 'spend_0':'spend_2'].sum(axis=1)
print (a)
0 19
1 11
2 9
3 12
4 11
dtype: int64
print (df.loc[:, 'spend_3':'spend_5'])
spend_3 spend_4 spend_5
0 7 7 0
1 2 2 2
2 4 0 9
3 1 5 3
4 7 1 1
b = df.loc[:, 'spend_3':'spend_5'].sum(axis=1)
print (b)
0 14
1 6
2 13
3 9
4 9
dtype: int64
关于python - Pandas - 对 1-N 列的总和系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618827/