[英]How to group based on cumulative sum that resets on a condition
我有一個 pandas df,其字數與文章相對應。 我希望能夠添加另一列MERGED
,該列基於具有最小累積總和“min_words”的文章組。
df = pd.DataFrame([[ 0, 6],
[ 1, 10],
[ 3, 5],
[ 4, 7],
[ 5, 26],
[ 6, 7],
[ 9, 4],
[ 10, 133],
[ 11, 42],
[ 12, 1]], columns=['ARTICLE', 'WORD_COUNT'])
df
Out[15]:
ARTICLE WORD_COUNT
0 0 6
1 1 10
2 3 5
3 4 7
4 5 26
5 6 7
6 9 4
7 10 133
8 11 42
9 12 1
那么如果min_words = 20
這就是所需的 output:
df
Out[17]:
ARTICLE WORD_COUNT MERGED
0 0 6 0
1 1 10 0
2 3 5 0
3 4 7 1
4 5 26 1
5 6 7 2
6 9 4 2
7 10 133 2
8 11 42 3
9 12 1 4
如上所示,最終文章可能不滿足 min_words 條件,這沒關系。
我們只能做self def function
def dymcumsum(v, limit):
idx = []
sums = 0
for i in range(len(v)):
sums += v[i]
if sums >= limit:
idx.append(i)
sums = 0
return(idx)
df['New']=np.nan
df.loc[dymcumsum(df.WORD_COUNT,20),'New']=1
df.New=df.New.iloc[::-1].eq(1).cumsum()[::-1].factorize()[0]+1
df
ARTICLE WORD_COUNT New
0 0 6 1
1 1 10 1
2 3 5 1
3 4 7 2
4 5 26 2
5 6 7 3
6 9 4 3
7 10 133 3
8 11 42 4
9 12 1 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.