在Python

时间:2016-11-18 09:24:03

标签: python python-2.7 python-3.x pandas

我有两个名为df1和df2的数据帧。

DF1 =

   col1   col2  count
0   1      36   200
1   12     15   200
2   13     17   100

DF2 =

    product_id  product_name
0      1            abc
1      2            xyz
2      3            aaaa
3      12           qwert 
4      13           sed
5      15           qase
6      36           asdf
7      17           zxcv

col1和col2 中的条目是来自df2的 product_id。

我想创建一个新的数据框' df3',它包含以下列和条目。

DF3 =

   col1 | col1_name | col2 | col2_name | count
0   1   |   abc     |   36 |    asdf   |  200
1   12  |   qwert   |   15 |    qase   |  200
2   13  |   sed     |   17 |    zxcv   |  100

即在col1_name col2_name product_id等于df2& col1时添加col2df3 = pd.concat([df1, df2], axis=1) struct GamePacket { var action: String var pointArray: [CGPoint] } 值。

是否可以这样做:

GamePacket

我对Pandas df和Python的了解是初学者的。 有办法吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我认为您可以使用dict生成的df2 map,然后按sort_index对列名进行排序:

d = df2.set_index('product_id')['product_name'].to_dict()
print (d)
{1: 'abc', 2: 'xyz', 3: 'aaaa', 36: 'asdf', 17: 'zxcv', 12: 'qwert', 13: 'sed', 15: 'qase'}

df1['col1_name'] = df1.col1.map(d)
df1['col2_name'] = df1.col2.map(d)
df1 = df1.sort_index(axis=1)
print (df1)
   col1 col1_name  col2 col2_name  count
0     1       abc    36      asdf    200
1    12     qwert    15      qase    200
2    13       sed    17      zxcv    100
df1 = df1.drop(['col1','col2'], axis=1)
print (df1)
  col1_name col2_name  count
0       abc      asdf    200
1     qwert      qase    200
2       sed      zxcv    100