Python:筛选数据结构取决于列值



我有两个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"栏的值充当索引,从而使调用稍微简单一些。

最新更新