从数据框中提取值

2024-04-20 13:12:26 发布

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

第一和第二数据帧如下:

import pandas as pd
d = {'0': [2154,799,1023,4724], '1': [27, 2981, 952,797],'2':[4905,569,4767,569]}
df1 = pd.DataFrame(data=d)

以及

d={'PART_NO': ['J661-03982','661-08913', '922-8972','661-00352','661-06291',''], 'PART_NO_ENCODED': [2154,799,1023,27,569]}
df2 = pd.DataFrame(data=d)

我想得到df1中每一行对应的part\u no,因此生成的数据帧应该如下所示:

d={'PART_NO': ['J661-03982','661-00352',''], 'PART_NO_ENCODED': [2154,27,4905]}
df3 = pd.DataFrame(data=d)

我可以这样做:

df2.set_index('PART_NO_ENCODED').reindex(df1.iloc[0,:]).reset_index().rename(columns={0:'PART_NO_ENCODED'})

但是我不想每次传递一个0,1的值,而是想得到df1中所有行的对应部分


Tags: 数据noimportdataframepandasdataindexas
1条回答
网友
1楼 · 发布于 2024-04-20 13:12:26

您可以将第二个数据帧用作替换字典:

df3 = df1.replace(df2.set_index('PART_NO_ENCODED').to_dict()['PART_NO'])

不在df2中的值将不会被替换。必须识别并丢弃:

df3 = df3[df1.isin(df2['PART_NO_ENCODED'].tolist())]
#            0          1          2
#0  J661-03982  661-00352        NaN
#1   661-08913        NaN  661-06291
#2    922-8972        NaN        NaN
#3         NaN        NaN  661-06291

稍后可以用''替换缺少的值,或者用fillna替换您选择的任何其他值

相关问题 更多 >