在单个柱桁架的基础上合并Pandas中的两个记录

2024-09-27 07:30:50 发布

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

我最近开始与熊猫(Python初学者)合作。我正在尝试合并来自不同id的两个记录,并创建一个最终记录,其中包含来自我信任的每个列的id的每个列的值。你知道吗

df1:
ID   NAME     ADDRESS    PHONE
1    abc      street1     9999

df2:
ID   NAME     ADDRESS    PHONE
2    xyz      street2     8888

df_col_priority:
COLUMN   PRIORITY_BY_ID
NAME        1
ADDRESS     2
PHONE       2

所以在这里,基于每个id的每列的优先级,我应该得到一个输出记录,如下所示:

df_output:
NAME      ADDRESS    PHONE
abc       street2     8888    

所以基本上我应该从ID=1得到NAME,从ID=2得到其他2个字段。
同样地,我有数千条记录,对于这些记录,我将通过逻辑选择两条记录的一对,并使用上述方法计算最终的输出记录。你知道吗

除了在每个数据帧的每一列上循环、提取优先级并通过concat逐列构造新的记录之外,我想不出其他方法来实现这一点。但我认为这是相当低效的。任何帮助都将不胜感激。你知道吗


Tags: 方法nameiddfaddress记录phonedf1
1条回答
网友
1楼 · 发布于 2024-09-27 07:30:50

我可能误解了您的问题,但无论如何,重温一下您是如何组织数据帧的似乎是有用的。也就是说,这个解决方案,虽然可能不雅观,但在您的情况下是有效的:

# start by concatenating df1 and df2 into one dataframe
full_df = pd.concat([df1, df2])
# create an empty output dataframe with the columns you want
df_output = pd.DataFrame(columns = df1.columns[1:])
# loop through your df_col_priority, making a series of your desired values,
# appending that series to df_output
# this uses a list iteration
df_output = df_output.append(pd.Series(
    [full_df.loc[full_df.ID == row.PRIORITY_BY_ID, row.COLUMN].values[0]
     for _, row in df_col_priority.iterrows()],
    index=df_col_priority.COLUMN), ignore_index=True)

你的df_output看起来像:

>>> df_output
  NAME  ADDRESS PHONE
0  abc  street2  8888

相关问题 更多 >

    热门问题