Pandas用另一个数据框列的单元格值和重复索引更新列

2024-09-27 00:19:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有两个dfs

df = pd.DataFrame({'A': ['a', 'b', 'a','d','e']},index=[1,2,3,4,5])

ndf = pd.DataFrame({'A': ['a', '2', '6','e'],
                   'B': ['apple', 'pen', 'sky','duck']},index=[7,8,9,19])

df的A列应使用ndf的B列值更新,如下所示: 如果df'a列的单元格值==ndf的a列值,则df'a列的单元格值不更新; 否则: df的A列单元格值应替换为ndf的B列单元格值:

例如: 更新后,A应类似于:

pd.DataFrame({'A': ['apple', 'b', 'apple','d','duck']},index=[1,2,3,4,5])

Tags: appledataframedfindexpdduckskydfs
2条回答

ndf创建dict,将其映射到df。将结果用于combine_firstdf.A

df.A.map(dict(zip(ndf.A,ndf.B))).combine_first(df.A)

1    apple
2        b
3    apple
4        d
5     duck

Step by Step

`d= dict(zip(ndf.A,ndf.B))`#Create dict

df['C']= df.A.map(d)# map dict to df.A

df.A=df.C.combine_first(df.A)#Update df.A

您可以使用to_dict创建字典,然后使用replace

df.replace(ndf.set_index('A').to_dict()['B'])

输出:

       A
1  apple
2      b
3  apple
4      d
5   duck

详细信息

print(ndf.set_index('A'))
A       
a  apple
2    pen
6    sky
e   duck


print(ndf.set_index('A').to_dict())
{'B': {'a': 'apple', '2': 'pen', '6': 'sky', 'e': 'duck'}}


print(ndf.set_index('A').to_dict()['B'])
{'a': 'apple', '2': 'pen', '6': 'sky', 'e': 'duck'}

print(df.replace(ndf.set_index('A').to_dict()['B']))
       A
1  apple
2      b
3  apple
4      d
5   duck

相关问题 更多 >

    热门问题