Python 比较数据帧中每列的前一行值
我有一个类似的问题 我有一个数据框,其中有一个ID列和一个计数器列,用于此想法,如下所示:Python 比较数据帧中每列的前一行值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个类似的问题 我有一个数据框,其中有一个ID列和一个计数器列,用于此想法,如下所示: ID counter valueA valueB A 1 10 1 A 2 10 1 A 3 5 1 B 1 1 2 B 2 1 3 B 3 2 4 B 4 3 4 ... 如何在d
ID counter valueA valueB
A 1 10 1
A 2 10 1
A 3 5 1
B 1 1 2
B 2 1 3
B 3 2 4
B 4 3 4
...
如何在dataframe中以1计算每列的行更改,使dataframe看起来像:
ID counter valueA valueB
A 1 0 0
A 2 0 0
A 3 1 0
B 1 0 0
B 2 0 1
B 3 1 1
B 4 1 1
...
因此,每次列中的值发生变化时(仅当它是相同的ID时,计数器不应被标记),我都会得到一个带有1的标记。请注意,我有更多的值列,这两个只是一个示例。使用:
df = pd.DataFrame({'ID': ['A', 'A', 'A', 'B', 'B', 'B', 'B'], 'counter': [1, 2, 3, 1, 2, 3, 4], 'valueA': [10, 10, 5, 1, 1, 2, 3], 'valueB': [1, 1, 1, 2, 3, 4, 4]})
打印(df)
对于每组计数器,我尝试此解决方案,但输出仍然不同:
df[c] = df[c].ne(df[c].groupby(df['ID']).shift().bfill()).groupby(df['ID']).cumsum()
print (df)
ID counter valueA valueB
0 A 1 0 0
1 A 2 0 0
2 A 3 1 0
3 B 1 0 0
4 B 2 0 1
5 B 3 1 2
6 B 4 2 2
注:为了成功安装最新的pandas版本是否可以添加更多数据,为了测试,同一组B中有2-3行新数据?@PV8-您的pandas版本是什么?@PV8-可能是原因,在
pandas 1.1.1
中测试其工作情况,我将尝试在我的data@PV8-测试是否没有重复的列名称。
df[c] = df[c].ne(df[c].groupby(df['ID']).shift().bfill()).groupby(df['ID']).cumsum()
print (df)
ID counter valueA valueB
0 A 1 0 0
1 A 2 0 0
2 A 3 1 0
3 B 1 0 0
4 B 2 0 1
5 B 3 1 2
6 B 4 2 2