【发布时间】:2019-12-17 05:08:02
【问题描述】:
我有如下数据框
id log loc pos_evnts neg_evnts As non_As pos_wrds neg_wrds As/Ac
A c City 8 0 48 0 0 0 1
A d City 2 6 0 180 4 10 0
A e City 0 22 87 0 0 0 1
A f City 8 0 35 0 0 0 1
A g City 8 2 42 0 0 0 1
A h City 4 4 0 115 4 2 0
A i City 2 0 32 0 0 0 1
B j Hill 3 0 24 0 0 0 1
B k City 6 8 116 0 0 2 1
B l City 2 4 200 0 0 2 1
C m City 2 0 40 0 0 0 0
C n Hill 5 0 1 0 2 0 0
C o City 5 0 7 0 0 5 1
如您所见,As/Ac 列中有零 (0)。
我想要做的是,当我们有一个零时,将零行的值添加到下 1 行。预期的结果如下所示。
此处“零”行的值添加到其下方的壁橱 1 行,但“零”行本身并未更改。
id log loc pos_evnts neg_evnts As non_As pos_wrds neg_wrds As/Ac
A c City 8 0 48 0 0 0 1
A d City 2 6 0 180 4 10 0
A e City 2 28 87 180 4 10 1
A f City 8 0 35 0 0 0 1
A g City 8 2 42 0 0 0 1
A h City 4 4 0 115 4 2 0
A i City 6 4 32 115 4 2 1
B j Hill 3 0 24 0 0 0 1
B k City 6 8 116 0 0 2 1
B l City 2 4 200 0 0 2 1
C m City 2 0 40 0 0 0 0
C n Hill 5 0 1 0 2 0 0
C o City 12 0 48 0 5 5 1
或
此处添加到下面壁橱 1 行的“零”行的值以及“零”行本身使用新值更新,但 As/Ac 列除外。 我希望 As/Ac 保持不变,因为我稍后会删除零行。
id log loc pos_evnts neg_evnts As non_As pos_wrds neg_wrds As/Ac
A c City 8 0 48 0 0 0 1
A d City 2 28 87 180 4 10 0
A e City 2 28 87 180 4 10 1
A f City 8 0 35 0 0 0 1
A g City 8 2 42 0 0 0 1
A h City 6 4 32 115 4 2 0
A i City 6 4 32 115 4 2 1
B j Hill 3 0 24 0 0 0 1
B k City 6 8 116 0 0 2 1
B l City 2 4 200 0 0 2 1
C m City 12 0 48 0 5 5 0
C n Hill 12 0 48 0 5 5 0
C o City 12 0 48 0 5 5 1
我尝试了df['As/Ac'].shift(fill_value=0).shift(-1).cumsum(),它给出了组',其中零后面跟着一个,但我无法继续进行(总结它们),因为我需要保留前 3 列并且它们是不同的。
我也尝试了以下方法,但出现错误。
df['validheads'] = df['As/Ac'].shift(fill_value=0).shift(-1).cumsum()
df.iloc[:,3:].groupby(['validheads'],as_index=False).sum()
【问题讨论】:
标签: python python-3.x pandas pandas-groupby