2024-09-29 19:30:56 发布
网友
我有一个数据帧df1,看起来像这样:
df1
field1 0 ALBER 2 LRRC1 3 JATOF
我还有一个df2
df2
0 1 2 0 0 3 0 1 1 711 908 2 2 319 290 3 3 974 546 4 4 213 55
其中字段1和2中的每个数字代表df1索引中的一个值。如何将df2的数字映射到df1的相应值
就像
0 1 2 0 0 ALBER JATOF ...
试试这个:
df3=df2.merge(df1, left_on="1", right_index=True).merge(df1, left_on="2", right_index=True, suffixes=("_1", "_2")).drop(["1", "2"], axis=1).rename(columns={"field1_1": "1", "field1_2": "2"})
对于我使用的示例数据:
import pandas as pd df1=pd.DataFrame({"field1": ["abc", "xyz", "pqr", "ghi", "yyy"]}) df2=pd.DataFrame({"0": [1,2,3,4,5], "1":[0, 4 ,2,2,3], "2": [4,3,3,2,1]}) df3=df2.merge(df1, left_on="1", right_index=True).merge(df1, left_on="2", right_index=True, suffixes=("_1", "_2")).drop(["1", "2"], axis=1).rename(columns={"field1_1": "1", "field1_2": "2"}) print(df3)
输出:
0 1 2 0 1 abc yyy 1 2 yyy ghi 2 3 pqr ghi 3 4 pqr pqr 4 5 ghi xyz [Program finished]
将iloc与apply和map一起使用:
iloc
apply
map
df2.iloc[:, 1:] = df2.iloc[:, 1:].apply(lambda x: x.map(df1['field1'])) 0 1 2 0 0 JATOF ALBER 1 1 NaN NaN 2 2 NaN NaN 3 3 NaN NaN 4 4 NaN NaN
注意:我们得到NaN,因为没有711, 908等的索引号,但在原始数据帧中应该可以
NaN
711, 908
试试这个:
对于我使用的示例数据:
输出:
将
iloc
与apply
和map
一起使用:注意:我们得到
NaN
,因为没有711, 908
等的索引号,但在原始数据帧中应该可以相关问题 更多 >
编程相关推荐