我有两个Panda数据帧,结构如下:
DF1:
|'ID'|'Zone'|
|:---------:|
| 11 | 1 |
| 12 | 2 |
| 10 | 0 |
DF2:
|'ID'|'Time'|
|:---------:|
| 11 | 1 |
| 11 | 2 |
| 12 | 1 |
| 12 | 2 |
我想在DF2命名区域中添加一个新列,其中包含每个ID所属区域的正确值。
|'ID'|'Time'|'Zone'|
|:----------------:|
| 11 | 1 | 1 |
| 11 | 2 | 1 |
| 12 | 1 | 2 |
| 12 | 2 | 2 |
对于这个小示例,我已经编写了一些运行良好的代码,但我希望在两个大型DF上使用is。所以我的问题是,有没有更美味(更好(的方法来做到这一点?我当前的代码是:
df2 = np.empty([len(df2.index)]
for i in df2.index:
for j in df.index:
if df2['id'][i] == df1['id'][j]:
df2.loc[i, 'zone'] = df1.loc[j, 'zone']
您需要使用merge
函数来执行联接:
pd.merge(df1, df2, on="ID")
其中on="ID"
表示哪个是引用列,并且必须存在于两个数据帧中(如果您想使用不同名称的列进行联接,也可以,只需检查文档即可(。
merge
也可用作数据帧的方法,因此您也可以将其称为:
df1.merge(df2, on="ID")
结果完全一样。
df1.merge(df2, how='right')
or
df2.merge(df1,how='left')
使用ID列连接df2和df1
这是一个不错的单行
df2["Zone"] = [df1.set_index("ID")["Zone"][df2["ID"][i]] for i in df2.index]
将df1的索引设置为其"ID"列允许df2的"ID"栏的值充当索引,从而使调用稍微简单一些。