我最近开始使用Pandas(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逐列构建新记录之外,我无法想到实现此目的的方法。但我认为这是非常低效的。任何帮助,将不胜感激。
我可能误解了你的问题,但无论如何,重新审视你如何组织你的数据帧似乎是有用的。话虽这么说,这个解决方案虽然可能不优雅,但在你的情况下有效:
# 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