在其他数据框中查找相应的值

时间:2018-03-11 15:59:43

标签: pandas

我有两个数据帧:

df1:
   a
0  0
1  1
2  2

df2:
   b  c
0  0  5
1  2  6
2  3  7

现在我想在df1.a == df2.b时向df1添加一个新列d,其中包含df2.c的值。即结果应该是这样的:

   a d
0  0 5
1  1 nan
2  2 6

我试过了:df1.loc[:, 'd'] = df2.loc[df2.b.eq(df1.a), 'c'], 这不起作用。你能解释一下为什么不呢?我假设某些指数。 此外,我怎样才能实现我想要的目标?申请,结束......? 谢谢!

编辑: 在我的具体应用案例中,我可能会遇到重复,例如:

df1:
   a
0  0
1  1
2  2

df2:
   b  c
0  0  5
1  0  6
2  3  7

我现在想要为新列df1.d分配df2.c的所有值的列表,其中df2.b == df1.a,即:

   a d
0  0 [5, 6]
1  1 nan
2  2 nan

1 个答案:

答案 0 :(得分:1)

我认为你需要import * as React from "react" import {rawData} from "./raw.data" export class App extends React.Component { state = { csv: rawData, //Here I set my data to be an array from the csv file data: rawData.replace(/\n/g, ",").split(",") } render() { const {csv, data} = this.state return <div> I want to add my table from Data here </div> } }(pandas是索引和列敏感的,你的df1和df2链接键是a和b,而不是索引,当你使用.loc它假设索引赋值)

merge

df1.merge(df2,left_on='a',right_on='b',how='left').drop('b',1).rename(columns={'c':'d'}) Out[136]: a d 0 0 5.0 1 1 NaN 2 2 6.0

map

如果有更多列

df1['d']=df1.a.map(df2.set_index('b').c)
df1
Out[142]: 
   a    d
0  0  5.0
1  1  NaN
2  2  6.0

更新

df1=df1.set_index('a')
df2=df2.set_index('b')

df1.join(df2)
Out[157]: 
     d    c
a          
0  5.0  5.0
1  NaN  NaN
2  6.0  6.0