假设我有一个至少有两列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
谢谢大家!
答案 0 :(得分:1)
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