我有两种不同的数据。一个看起来像这样
arriv depart stop_id
12:35 12:40 a2b
23:00 01:00 a1e其他的看起来是这样的:
stop_id lon lat name
a1e 12.1 13.2 Old Church
a2b 12.2 13.1 Postal Service现在,我想用数据子集创建一个如下所示的dataframe:
arriv depart stop_id lon lat name
12:35 12:40 a2b 12.2 13.1 Postal Service
23:00 01:00 a1e 12.1 13.2 Old Church基本合并这两个数据格式,但在停止列表中包含大量的双条目。做这件事的好方法是什么?
发布于 2020-03-28 14:41:17
您可以在主熊猫名称空间中使用pandas.DataFrame.merge()函数来组合公共列stop_id上的这些数据:
import pandas as pd
df1 = pd.DataFrame(
{'arriv': ['12:35', '23:00'],
'depart': ['12:40', '01:00'],
'stop_id': ['a2b', 'a1e']}
)
df2 = pd.DataFrame(
{'stop_id': ['a2b', 'a1e'],
'lon': ['12.1', '12.2'],
'lat': ['12.2', '13.1'],
'name': ['Old Church', 'Postal Service']}
)
print (pd.merge(df1, df2, on='stop_id'))在您的示例中,不需要将how参数定义为默认的inner。但有时您可以使用left、right或outer (类似于SQL full outer join)选项,例如
pd.merge(df1, df2, how='outer', on='stop_id')发布于 2020-03-28 14:39:31
我相信您想要的是:“对于第一个dataframe中的每个实例,合并lon lat和name列(在另一个dataframe中可用)。”
如果是这样的话,可以使用pd.merge():
import pandas as pd
timeDF = pd.DataFrame({
"arriv":["12:35","23:00","13:35","12:35"],
"depart":["12:40","01:00","14:25","14:35"],
"stop_id":["a2b","a1e","a2b","a1e"]
})
stopDF = pd.DataFrame({
"long":["12.1","13.1"],
"lat":["13.0","14.3"],
"name":["nameA","nameB"],
"stop_id":["a2b","a1e"]
})
print(pd.merge(timeDF,stopDF,how='left',on='stop_id'))投入:
arrive_departure_dataframe:
arriv depart stop_id
0 12:35 12:40 a2b
1 23:00 01:00 a1e
2 13:35 14:25 a2b
3 12:35 14:35 a1e
stops_information_dataframe:
long lat name stop_id
0 12.1 13.0 nameA a2b
1 13.1 14.3 nameB a1e产出:
arriv depart stop_id long lat name
0 12:35 12:40 a2b 12.1 13.0 nameA
1 23:00 01:00 a1e 13.1 14.3 nameB
2 13:35 14:25 a2b 12.1 13.0 nameA
3 12:35 14:35 a1e 13.1 14.3 nameBhttps://stackoverflow.com/questions/60902033
复制相似问题