Python 如何比较数据帧中的行子集
我有一个大熊猫数据框,看起来像这样:Python 如何比较数据帧中的行子集,python,pandas,Python,Pandas,我有一个大熊猫数据框,看起来像这样: id type price min max 1 ch 10 10 100 1 fo 8 20 100 1 dr 7 10 90 1 ad
id type price min max
1 ch 10 10 100
1 fo 8 20 100
1 dr 7 10 90
1 ad 5 16 20
1 dr 6 10 90
1 fo 4 20 100
2 ch 5 40 50
2 fo 3 10 50
2 ch 3 40 50
... ... ... ... ...
我想添加一个新列“match”,以获得以下内容:
id type price min max match
1 ch 10 10 100 false
1 fo 8 20 100 false
1 dr 7 10 90 false
1 ad 5 16 20 false
1 dr 6 10 90 true
1 fo 4 20 100 true
2 ch 5 40 50 false
2 fo 3 10 50 false
2 ch 3 40 50 true
... ... ... ... ... ...
我尝试使用shift:
df['match']=np.where((df['id'] == df['id'].shift()) & (df['type'] == df['type'].shift()) & (df['min'] == df['min'].shift()) & (df['max'] == df['max'].shift()),true, false)
但这只是将当前行与前一行进行比较,没有特定的模式来确定与条件匹配的前几行的数量。我想选择id作为比较行的窗口。有什么方法吗
非常感谢您的任何建议
谢谢您可以使用指定列的子集来考虑:
df.assign(match=df.duplicated(subset=['id', 'type', 'min', 'max']))
id type price min max match
0 1 ch 10 10 100 False
1 1 fo 8 20 100 False
2 1 dr 7 10 90 False
3 1 ad 5 16 20 False
4 1 dr 6 10 90 True
5 1 fo 4 20 100 True
6 2 ch 5 40 50 False
7 2 fo 3 10 50 False
8 2 ch 3 40 50 True
您可以使用指定列的子集来考虑:
df.assign(match=df.duplicated(subset=['id', 'type', 'min', 'max']))
id type price min max match
0 1 ch 10 10 100 False
1 1 fo 8 20 100 False
2 1 dr 7 10 90 False
3 1 ad 5 16 20 False
4 1 dr 6 10 90 True
5 1 fo 4 20 100 True
6 2 ch 5 40 50 False
7 2 fo 3 10 50 False
8 2 ch 3 40 50 True
所以你想知道一行是否与n个先前的行相同,其中n=
id
?那么你想知道一行是否与n个先前的行相同,其中n=id
?我想你的第一个答案已经很好了,除了子集应该扩展到subset=['id',type',min',max']
iiuc。我认为你的第一个答案已经很好了,只是子集应该扩展到subset=['id'、'type'、'min'、'max']
iiuc。