我有以下数据框,我想拥有“ counter_col_x”列,其中x == 8列应为“ count”。只有x = 8列很重要。
counter_col_x x y
0 8 36
0 8 36
0 8 36
0 8 36
0 8 36
nan 1 0
nan 1 1
nan 1 0
1 8 36
1 8 36
1 8 36
1 8 37
1 8 36
nan 1 0
nan 1 1
nan 1 0
nan 1 0
2 8 36
2 8 37
2 8 36
2 8 37
2 8 36
感谢任何提示,
欢呼。
答案 0 :(得分:3)
使用:
df = ( df.assign(counter_col_x = df.loc[df['x'].eq(8)]
.groupby(df['x'].ne(df['x'].shift())
.cumsum())
.ngroup()
#.reindex(index = df.index) #only if necessary
)
.reindex(columns = ['counter_col_x'] + df.columns.tolist()) )
或更佳:
df = ( df.join(df.loc[df['x'].eq(8)]
.groupby(df['x'].ne(df['x'].shift())
.cumsum())
.ngroup()
#.reindex(index = df.index) #only if necessary
.rename('counter_col_x'))
)
输出
counter_col_x x y
0 0.0 8 36
1 0.0 8 36
2 0.0 8 36
3 0.0 8 36
4 0.0 8 36
5 NaN 1 0
6 NaN 1 1
7 NaN 1 0
8 1.0 8 36
9 1.0 8 36
10 1.0 8 36
11 1.0 8 37
12 1.0 8 36
13 NaN 1 0
14 NaN 1 1
15 NaN 1 0
16 NaN 1 0
17 2.0 8 36
18 2.0 8 37
19 2.0 8 36
20 2.0 8 37
21 2.0 8 36