【发布时间】:2021-08-02 21:08:30
【问题描述】:
我想用 df2['id'] 中的相应 ID 替换 df1['fruit'] 中的水果字符串。本质上,我正在尝试为水果创建一个查找表。
df1
| fruit | store | price |
|---|---|---|
| apple | heb | 0.99 |
| orange | heb | 0.69 |
| apple | kroger | 0.88 |
| apple | walmart | 0.89 |
| banana | heb | 0.59 |
| banana | walmart | 0.59 |
| orange | kroger | 0.39 |
df2
| id | fruit |
|---|---|
| 0 | apple |
| 1 | orange |
| 2 | banana |
我想将 df1 修改为如下所示(最好是原地):
df1
| fruit | store | price |
|---|---|---|
| 0 | heb | 0.99 |
| 1 | heb | 0.69 |
| 0 | kroger | 0.88 |
| 0 | walmart | 0.89 |
| 2 | heb | 0.59 |
| 2 | walmart | 0.59 |
| 1 | kroger | 0.39 |
这似乎是一件很简单的事情,但我对 Pandas 还很陌生,所以我需要一些帮助。我所做的所有谷歌搜索和stackoverflow-ing 还没有完全回答这个问题。另外,最终我还想创建一个查找数据框来对 df1['store']
中的商店名称字符串进行相同类型的替换以下是我迄今为止尝试过的一些事情:
.loc
df1.loc[df1['fruit'] == df2['fruit'], 'fruit'] = df2['id']
这会导致以下错误:ValueError: Can only compare identically-labeled Series objects
.哪里
df1.where(df1['fruit'] == df2['fruit'], other= df2['id'], inplace=True)
我知道我错了,因为where 应该根据错误条件替换值。另外,它不起作用,所以还有另一个线索我走错了路:)
.replace
我不再有此代码,但我尝试将 df2 转换为 dict 并有条件地替换 df1 中的值。
我知道我很接近了!这是我需要做的很多事情......根据来自另一个数据帧的值替换一个数据帧中的值。任何帮助将不胜感激!
提前致谢:)
【问题讨论】:
-
已经有很多关于这个的话题了。
df2['fruit'].map(df1.set_index('fruit')['id']). -
df1.merge(df2,on='fruit') -
感谢@QuangHoang,但这会导致
KeyError: 'id' -
谢谢@AnuragDabas 这真的很接近我想要的,如果没有更好的方法我可以使用它。是否可以在不必删除 df1['fruit'] 并将新添加的 df1['id'] 列重命名为 'fruit' 的情况下进行这种操作?
-
顺便说一句,您不需要删除 df1['fruit'] 并将新添加的 df1['id'] 列重命名为 'fruit?...我的意思是您的意思..对不起我没听懂:(