我有一个这样的数据框:
import pandas as pd
df = pd.DataFrame({ 'num' : [0.43, 5.2, 1.3, 0.33, .74, .5, .2, .12],
'complete' : [False, True, False, False, True, False, True, True]
})
df
complete num
0 False 0.43
1 True 5.20
2 False 1.30
3 False 0.33
4 True 0.74
5 False 0.50
6 True 0.20
7 True 0.12
我想创建一个总和列表,每个 True 条目都有一个值,后跟 df.complete 中的至少一个 False >。它应该是 True num 加上之后每个 False num 的总和,直到下一个 True 再次出现。
在此示例中,它将是两个总和的列表:
[(5.2 + 1.3 + 0.33), (0.74 + 0.5)]
所以最后的结果是
[6.83, 1.24]
生成最终列表的 pythonic 方法是什么?
请您参考如下方法:
我会这样做:
# create a group
df['group'] = df['complete'].cumsum()
# find which groups to add
vals = df.group.value_counts()
groups_to_consider = vals[vals > 1].index.tolist()
## add values
df[df['group'].isin(groups_to_consider)].groupby('group')['num'].sum().tolist()
# [6.83, 1.24]
