Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何比较数据帧中的行子集_Python_Pandas - Fatal编程技术网

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。