Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Duplicates - Fatal编程技术网

Python 使用熊猫标识重复的行,并将这些行转换为一行,从而创建新的列

Python 使用熊猫标识重复的行,并将这些行转换为一行,从而创建新的列,python,pandas,duplicates,Python,Pandas,Duplicates,我有一个站点数据集 map_id longitude latitude zip_code 0 40830 -87.669147 41.857908 60608 1 40830 -87.669147 41.857908 60608 2 40120 -87.680622 41.829353 60609 3 40120 -87.680622 41.829353 60609 4 41120 -87.625826 41.8316

我有一个站点数据集

    map_id  longitude   latitude  zip_code
0   40830 -87.669147  41.857908     60608
1   40830 -87.669147  41.857908     60608
2   40120 -87.680622  41.829353     60609
3   40120 -87.680622  41.829353     60609
4   41120 -87.625826  41.831677     60616
如您所见,前四行是重复的,这不是偶然的。它们是相同的车站,被视为不同线路的独立车站

我想消除这种重复,它可以是2,甚至5行的一些车站,并视为一个车站

此外,我想创建一个新的列Hub,其中聚合的行将被视为一个Hub站。例如,布尔值0表示常规电台,1表示集线器

上面的示例的所需输出带有两个重复->转换为3行,带有2个集线器

    map_id  longitude   latitude  zip_code    hub
0   40830 -87.669147  41.857908     60608      1
1   40120 -87.680622  41.829353     60609      1
1   41120 -87.625826  41.831677     60616      0
谢谢你给我小费

df = df.groupby(['map_id','longitude','latitude','zip_code']).size().reset_index(name='hub')

df['hub'] = df['hub'].replace(1,0).apply(lambda x:min(x,1))
输出

   map_id  longitude   latitude  zip_code  hub
0   40120 -87.680622  41.829353     60609    1
1   40830 -87.669147  41.857908     60608    1
2   41120 -87.625826  41.831677     60616    0
输出

   map_id  longitude   latitude  zip_code  hub
0   40120 -87.680622  41.829353     60609    1
1   40830 -87.669147  41.857908     60608    1
2   41120 -87.625826  41.831677     60616    0

在我看来,您希望删除重复项并将某些zipcodes指定为中心。如果是这样,我会删除重复项并使用np.where来分配集线器。我包含了一个不存在的操作码,以演示在多个zipcode被指定为集线器时如何做到这一点

import numpy as np



df2=df.drop_duplicates(subset=['map_id','longitude','latitude','zip_code'], keep='first')
conditions=df2['zip_code'].isin(['60616','60619'])
df2['hub']=np.where(conditions,0,1)

在我看来,您希望删除重复项并将某些zipcodes指定为中心。如果是这样,我会删除重复项并使用np.where来分配集线器。我包含了一个不存在的操作码,以演示在多个zipcode被指定为集线器时如何做到这一点

import numpy as np



df2=df.drop_duplicates(subset=['map_id','longitude','latitude','zip_code'], keep='first')
conditions=df2['zip_code'].isin(['60616','60619'])
df2['hub']=np.where(conditions,0,1)

已经尝试过数据帧。丢弃重复的数据帧?谢谢,但这并不能解决我的问题,如何知道我有哪些集线器?也许如果我使用这个,我需要先创建一个额外的列,以某种方式将重复项标记为集线器,然后才删除它们。我尝试过DataFrame。删除重复项?谢谢,但这并不能解决我的问题,我怎么知道我有哪些集线器?也许如果我使用这个,我需要先创建一个额外的列,以某种方式将重复项标记为集线器,然后才删除它们。是的,这个逻辑也适用,非常感谢。我希望我也能接受这个答案,但我认为第一个答案是公平的。非常感谢你的帮助!是的,这个逻辑也适用,非常感谢。我希望我也能接受这个答案,但我认为第一个答案是公平的。非常感谢你的帮助!