rwo*_*lst 4 python group-by dataframe pandas pandas-groupby
考虑数据框
df = pd.DataFrame(
[
['A', 1],
['A', 1],
['B', 1],
['B', 0],
['A', 0],
['A', 1],
['B', 1]
], columns = ['key', 'cond'])
Run Code Online (Sandbox Code Playgroud)
我想为每个 找到一个累积(运行)计数(从 1 开始)key
,如果组中的前一个值有cond == 1
. 当附加到上述数据框时,这将给出
df_result = pd.DataFrame(
[
['A', 1, 1],
['A', 1, 2],
['B', 1, 1],
['B', 0, 2],
['A', 0, 3],
['A', 1, 3],
['B', 1, 2]
], columns = ['key', 'cond'])
Run Code Online (Sandbox Code Playgroud)
请注意,cond
每组中最后一行的值基本上key
没有影响。
只是做了简单的group
和cumcount
df.groupby('key').cumcount()
Run Code Online (Sandbox Code Playgroud)
当然不考虑cond
前一个元素的值。我如何才能考虑到这一点?
编辑
由于下面的一些解决方案在某些边缘情况下不起作用,我将提供一个更全面的数据框进行测试。
df = pd.DataFrame(
[
['A', 0],
['A', 1],
['A', 1],
['B', 1],
['B', 0],
['A', 0],
['A', 1],
['B', 1],
['B', 0]
], columns = ['key', 'cond'])
Run Code Online (Sandbox Code Playgroud)
在附加真实结果时应该给出
df_result = pd.DataFrame(
[
['A', 0, 1],
['A', 1, 1],
['A', 1, 2],
['B', 1, 1],
['B', 0, 2],
['A', 0, 3],
['A', 1, 3],
['B', 1, 2],
['B', 0, 3]
], columns = ['key', 'cond'])
Run Code Online (Sandbox Code Playgroud)
df['new'] = df.groupby('key').cond.apply(
lambda x: x.shift().fillna(1).cumsum()
).astype(int)
Run Code Online (Sandbox Code Playgroud)
df
key cond new
0 A 1 1
1 A 1 2
2 B 1 1
3 B 0 2
4 A 0 3
5 A 1 3
6 B 1 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4365 次 |
最近记录: |