我有两个数据帧。第一个包含不同城市的数据。
dfTmp:
City 2005 2007
0 London 3 7
1 Paris 2 0
然后我要填充的空数据框
dfData:
City Year
0 London 2005
1 London 2007
2 Paris 2005
3 Paris 2007
我想合并两个数据集。然后dfData
应该变为以下
dfData:
City Year Value
0 London 2005 3
1 London 2007 7
2 Paris 2005 2
3 Paris 2007 0
答案 0 :(得分:3)
您不需要第二个数据帧dfData。您需要的所有数据都在dfTmp中。您只需使用以下内容重塑dfTmp:
set_index
和stack
dfData = dftmp.rename_axis('Year', 1).set_index('City').stack().reset_index(name='Value')
print(dfData)
输出:
City Year Value
0 London 2005 3
1 London 2007 7
2 Paris 2005 2
3 Paris 2007 0
melt
:dfData = dftmp.melt(id_vars='City', var_name='Year', value_name='Value')
print(dfData)
输出:
City Year Value
0 London 2005 3
1 Paris 2005 2
2 London 2007 7
3 Paris 2007 0
答案 1 :(得分:0)
上面给出的解决方案 - 避免仅使用dfTmp进行合并 - 似乎是最佳的。 如果您坚持使用Merge,可以执行以下操作:
首先注意导入Pandas包:
import pandas as pd
我们有以下数据:
Tmp = {'City': ['London', 'Paris'],
'2005': [3,2],
'2007': [7,0]}
dfTmp = pd.DataFrame(data, columns = ['City', '2005', '2007'])
和
data = {'City': ['London', 'London', 'Paris', 'Paris'],
'Year': [2005,2007, 2005, 2007]}
dfData = pd.DataFrame(data, columns = ['City', 'Year'])
然后在Pandas中使用Merge:
dfNew = pd.merge(dfData, dfTmp)
dfNew.iloc[0:4,0:3]