我有两个数据帧:
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
答案 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