pandas 将数据框中的所有值更改为另一个数据框中的其他值

n6lpvg4x  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(117)

我刚开始学习Pandas。我有两个 Dataframe 。第一个是

val  num
0    1    0
1    2    1
2    3    2
3    4    3
4    5    4

第二个是

0  1  2  3
0  1  2  3  4
1  5  3  2  2
2  2  5  3  2

我想改变我的第二个dataframe,以便将dataframe中存在的值与第一个dataframe中的列val进行比较,并且每个相同的值都需要在dataframe 1的num列中存在的值中进行更改。这意味着最后我需要获得以下dataframe:

0  1  2  3
0  0  1  2  3
1  4  2  1  1
2  1  4  2  1

我怎么在Pandas中做到这一点?

j13ufse2

j13ufse21#

您可以使用DataFrame.replace()来执行以下操作:

df2.replace(df1.set_index('val')['num'])

说明:
1.第一步是将第一个DataFrame的val列设置为索引。这将改变第三步中执行匹配的方式。
1.将第一个DataFrame转换为一个Series,方法是将索引和num列作为子集。它看起来像这样:

val
1    0
2    1
3    2
4    3
5    4
Name: num, dtype: int64

1.接下来,使用DataFrame.replace()在第二个DataFrame中进行替换。它从第二个DataFrame中查找每个值,在Series中找到匹配的索引,并将其替换为Series中的值。
完全可再现的示例:

import pandas as pd
import io

s = """   val  num
0    1    0
1    2    1
2    3    2
3    4    3
4    5    4"""
df1 = pd.read_csv(io.StringIO(s), delim_whitespace=True)
s = """   0  1  2  3
0  1  2  3  4
1  5  3  2  2
2  2  5  3  2"""
df2 = pd.read_csv(io.StringIO(s), delim_whitespace=True)

print(df2.replace(df1.set_index('val')['num']))
siv3szwd

siv3szwd2#

创建Mapdict,然后创建replace

mpd = dict(zip(df1.val,df1.num))
df2.replace(mpd, inplace=True)
   0  1  2  3
0  0  1  2  3
1  4  2  1  1
2  1  4  2  1

相关问题