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