英文:
How to replace column value with other columns in pandas?
问题
我有一个简单的问题。我有两个数据框:
df1 =
code | countries |
---|---|
FR | 法国 |
US | 美国 |
IT | 意大利 |
和另一个数据框是:
df2=
countries |
---|
FR |
FR |
IT |
US |
US |
US |
IT |
我想在df2中用df1中的国家列来替换。
英文:
I have a simple question. I have 2 dataframe:
df1 =
code | countries |
---|---|
FR | France |
US | United-States |
IT | Italy |
and an other one which is:
df2=
countries |
---|
FR |
FR |
IT |
US |
US |
US |
IT |
I would like in df2 replace the countries column with the one in df1.
答案1
得分: 1
与df1上的代码合并,并与df2上的国家合并,稍微进行重命名,然后只获取国家列。
df2 = df2.merge(df1, right_on='code', left_on='countries', suffixes=('_old', ''))
df2 = df2[['countries']]
英文:
Merge with code on df1 and countries on df2 with a bit of renaming and then just grab the countries column.
df2 = df2.merge(df1, right_on = 'code', left_on = 'countries', suffixes = ('_old', ''))
df2 = df2[['countries']]
答案2
得分: 1
使用 `df1` 的 `dict` 形式对数值进行映射:
>>> df2["countries"].map(df1.set_index("code").squeeze().to_dict())
0 法国
1 法国
2 意大利
3 美国
4 美国
5 美国
6 意大利
Name: countries, dtype: object
<details>
<summary>英文:</summary>
`map` the values using the `dict` form of `df1`:
>>> df2["countries"].map(df1.set_index("code").squeeze().to_dict())
0 France
1 France
2 Italy
3 United-States
4 United-States
5 United-States
6 Italy
Name: countries, dtype: object
</details>
# 答案3
**得分**: 0
你可以使用 `merge` 函数,然后重命名和删除多余的列。
我添加了一些额外的操作以在合并后还原索引。
```python
df1 = pd.DataFrame({
"code": ["FR", "US", "IT"],
"countries": ["France", "United-States", "Italy"]
})
df2 = pd.DataFrame({
"countries": ['FR', 'FR', 'IT', 'US', 'US', 'US', 'IT'],
"idx": range(7),
})
df2.reset_index(inplace=True)
df2 \
.merge(df1, left_on="countries", right_on="code") \
.rename({"countries_y": "countries"}, axis=1) \
.set_index("index") \
.drop(["code", "countries_x"], axis=1)
输出:
countries
index
0 France
1 France
2 Italy
6 Italy
3 United-States
4 United-States
5 United-States
英文:
You can use merge
function, then rename and drop extra columns.
I added some extra actions with index to restore it after merging.
df1 = pd.DataFrame({
"code": ["FR", "US", "IT"],
"countries": ["France", "United-States", "Italy"]
})
df2 = pd.DataFrame({
"countries": ['FR', 'FR', 'IT', 'US', 'US', 'US', 'IT'],
"idx": range(7),
})
df2.reset_index(inplace=True)
df2 \
.merge(df1, left_on="countries", right_on="code") \
.rename({"countries_y": "countries"}, axis=1) \
.set_index("index") \
.drop(["code", "countries_x"], axis=1)
Output:
countries
index
0 France
1 France
2 Italy
6 Italy
3 United-States
4 United-States
5 United-States
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论