基于其他列创建新列作为另一个数据帧的索引

时间:2017-03-23 10:40:37

标签: python pandas dataframe

假设我有一个至少有两列col1和col2的数据帧。另外我还有另一个数据帧,其列名是col 1中的值,其索引是col2中的值。

import pandas as pd
df1 = pd.DataFrame( {'col1': ['x1', 'x2', 'x2'], 'col2': ['y0', 'y1', 'y0']})
print(df1)
  col1 col2
0   x1   y0
1   x2   y1
2   x2   y0

print(df2)
     y0   y1
x1    1    4
x2    2    5
x3    3    6

现在我想添加col3,它给出了col1索引和col2列中第二个数据帧的值。 结果应如下所示:

   col1  col2  col3
0    x1    y0     1
1    x2    y1     5
2    x2    y0     2

谢谢大家!

2 个答案:

答案 0 :(得分:1)

您可以将stack用于merge的新df

df2 = df2.stack().reset_index()
df2.columns = ['col1','col2','col3']
print (df2)
  col1 col2  col3
0   x1   y0     1
1   x1   y1     4
2   x2   y0     2
3   x2   y1     5
4   x3   y0     3
5   x3   y1     6

print (pd.merge(df1, df2, on=['col1','col2'], how='left'))
  col1 col2  col3
0   x1   y0     1
1   x2   y1     5
2   x2   y0     2

另一种解决方案是使用join创建新的Series

s = df2.stack().rename('col3')
print (s)
  col1 col2
0   x1   y0
1   x2   y1
2   x2   y0
x1  y0    1
    y1    4
x2  y0    2
    y1    5
x3  y0    3
    y1    6
Name: col3, dtype: int64

print (df1.join(s, on=['col1','col2']))
  col1 col2  col3
0   x1   y0     1
1   x2   y1     5
2   x2   y0     2

答案 1 :(得分:1)

简单连接

Pandas支持索引和列上的连接操作,这意味着您可以这样做:

df1.merge(df2, left_on='col1', right_index=True)

可生产

  col1 col2  y0  y1
0   x1   y0   1   4
1   x2   y1   2   5
2   x2   y0   2   5

下一步是<{1}}获取正确的值

应用

这样效率有点低,但它是将正确的数据放入一列的方法

col3