我找不到一个优雅的解决方案来合并这两个数据集:
假设我有第一个数据集,里面有城市的温度
2016 2017
cityA 23 27
cityB 24 28另一个有很多信息,但看起来是这样的:
city year other
0 cityA 2016 aa
1 cityB 2017 bb
2 cityA 2016 cc
3 cityB 2017 dd我希望得到以下结果:
city year other temperatures
0 cityA 2016 aa 23
1 cityB 2017 bb 28
2 cityA 2016 cc 23
3 cityB 2017 dd 24谢谢你的帮忙!
编辑:真实和更复杂的数据文件:
数据1与温度

dataframe 2与其他数据:

答案的执行结果:

发布于 2018-06-29 07:49:35
使用stack和reset_index进行重组,然后使用merge,我认为在左联接时:
df11 = df1.stack().reset_index()
df11.columns = ['city','year','temperatures']
#if years are strings convert to integers
df11['year'] = df11['year'].astype(int)
df = df2.merge(df11, on=['city','year'], how='left')
print (df)
city year other temperatures
0 cityA 2016 aa 23
1 cityB 2017 bb 28
2 cityA 2016 cc 23
3 cityB 2017 dd 28发布于 2018-06-29 08:11:27
熔融+合并
您可以熔化您的“旋转”数据,然后左与您的主数据合并。假设您的第一个dataframe中的年份列是整数。
melted = pd.melt(df1.reset_index(), id_vars='index')
res = df2.merge(melted, left_on=['city', 'year'],
right_on=['index', 'variable'], how='left')
print(res[['city', 'year', 'other', 'value']])
city year other value
0 cityA 2016 aa 23
1 cityB 2017 bb 28
2 cityA 2016 cc 23
3 cityB 2017 dd 28https://stackoverflow.com/questions/51096736
复制相似问题