我在熊猫中有以下数据框
code tank nozzle_1 nozzle_2 nozzle_var
123 1 1 1 10
123 1 2 2 12
123 2 1 1 10
123 2 2 2 12
我想计算在容器上分组的喷嘴_1和喷嘴_2列的累积总和。以下是我想要的数据框。
code tank nozzle_1 nozzle_2 nozzle_var nozzle_1_cumsum nozzle_2_cumsum
123 1 1 1 10 1 1
123 1 2 2 12 3 3
123 2 1 1 10 1 1
123 2 2 2 12 3 3
我从熊猫中的以下代码中获取了喷嘴_1和喷嘴_2
cols= df.columns[df.columns.str.contains(pat='nozzle_\d+$', regex=True)]
如何从上面的列列表中计算总和
答案 0 :(得分:2)
该解决方案如何:
cols= df.columns[df.columns.str.contains(pat='nozzle_\d+$', regex=True)]
df.assign(**df.groupby('tank')[cols].agg(['cumsum'])\
.pipe(lambda x: x.set_axis(x.columns.map('_'.join), axis=1, inplace=False)))
输出:
tank nozzle_1 nozzle_2 nozzle_var nozzle_1_cumsum nozzle_2_cumsum
0 1 1 1 10 1 1
1 1 2 2 12 3 3
2 2 1 1 10 1 1
3 2 2 2 12 3 3
步骤:
df_cumsum = df.groupby('tank')[cols].agg(['cumsum'])
df_cumsum.columns = df_cumsum.columns.map('_'.join)
pd.concat([df, df_cumsum], axis=1)
输出:
tank nozzle_1 nozzle_2 nozzle_var nozzle_1_cumsum nozzle_2_cumsum
0 1 1 1 10 1 1
1 1 2 2 12 3 3
2 2 1 1 10 1 1
3 2 2 2 12 3 3
答案 1 :(得分:1)
import pandas as pd
d = {
"tank":[1,1,1,2],
"nozzle_1":[1,2,1,2],
"nozzle_2":[1,2,1,2]
}
df = pd.DataFrame(d)
columns = df.columns[df.columns.str.match("nozzle_\d+$")]
df[columns + "_cumsum"] = \
df.groupby("tank")[columns].cumsum(axis=0)
df
输出
tank nozzle_1 nozzle_2 nozzle_1_cumsum nozzle_2_cumsum
0 1 1 1 1 1
1 1 2 2 3 3
2 1 1 1 4 4
3 2 2 2 2 2