python - 熊猫如何将一个数据帧的一列作为一行添加到另一个数据帧中
问题描述
我有以下df_1
,
0 1 2 3
-1 201704 201705 201706
750 -1 -1 -1
760 12 0 0
我还有另外两个 DataFrames df_2
,
code avg_days
750 12
760 9.6
和df_3
,
year_month avg_days
201704 13.5
201705 14.5
201706 15.5
我喜欢先添加一行[0, 0, 0, 0, 0]
into并用两个sdf_1
填充,使其看起来像,然后将其插入到 列中,看起来像,df_2['avg_days']
0
[0, 0, 12, 9.6]
1
df_1
0 1 2 3 4
-1 0 201704 201705 201706
0 0 0 0 0
750 12 -1 -1 -1
760 9.6 12 0 0
最后,我想df_3['avg_days']
用两个0
s 填充使其看起来像[0, 0, 13.5, 14.5, 15.5]
,然后将其插入为 的第二行df_1
,看起来像,
0 1 2 3 4
-1 0 201704 201705 201706
0 0 13.5 14.5 15.5
750 12 -1 -1 -1
760 9.6 12 0 0
解决方案
您的数据缺乏结构:您想要的结果没有有意义的行和索引标签。因此,解决方案也很混乱:
# merge df1 with df3
mrg = df1.T.merge(df3.rename(columns={'year_month': 0}), how='outer')
# realign column order
mrg.columns = np.arange(mrg.shape[1])
mrg.insert(1, 3, mrg.pop(3))
# merge result with df2
res = mrg.T.merge(df2.rename(columns={'code': 0}), how='outer')
# realign column order and names
res.insert(1, 4, res.pop('avg_days'))
res = res.fillna(0)
res.columns = np.arange(res.shape[1])
print(res)
0 1 2 3 4
0 -1.0 0.0 201704.0 201705.0 201706.0
1 0.0 0.0 13.5 14.5 15.5
2 750.0 12.0 -1.0 -1.0 -1.0
3 760.0 9.6 12.0 0.0 0.0