首页 > 解决方案 > 熊猫如何将一个数据帧的一列作为一行添加到另一个数据帧中

问题描述

我有以下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]1df_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']用两个0s 填充使其看起来像[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

标签: pythonpython-3.xpandasdataframeseries

解决方案


您的数据缺乏结构:您想要的结果没有有意义的行和索引标签。因此,解决方案也很混乱:

# 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

推荐阅读