python - 如果 Pandas 中没有重复项,则将行值从一个 df append 到另一个

标签 python pandas dataframe append

我有两个 dfs


df1 = pd.DataFrame({'pupil': ["sarah", "john", "fred"],
                  'class': ["1a", "1a", "1a"]})


df2 = pd.DataFrame({'pupil_mixed': ["sarah", "john", "lex"],
                  'class': ["1a", "1c", "1a"]})


我想从 df2 的“pupil_mixed”列中 append 行值
如果值不重复,则转到 df1 中的“瞳孔”列
期望的结果:
df1 = pd.DataFrame({'pupil': ["sarah", "john", "fred", 'lex'],
                  'class': ["1a", "1a", "1a", NaN]})


我用过 appendlocdf1 = df1.append(df2.loc[df2['pupil_mixed'] != df1['pupil'] ])它只是将另一列 append 到具有匹配行值的 df 并将不匹配的行值更改为 NaN
    pupil   class   pupil_mixed
0   sarah   1a      NaN
1   john    1a      NaN
2   fred    1a      NaN
2   NaN     1a      lex




最佳答案

您可以使用 concat + drop_duplicates :

res = pd.concat((df1, df2['pupil_mixed'].to_frame('pupil'))).drop_duplicates('pupil')

print(res)
输出
   pupil class
0  sarah    1a
1   john    1a
2   fred    1a
2    lex   NaN
作为替代方案,您可以先过滤(使用 isin )然后连接:
# filter the rows in df2, rename the column pupil_mixed
filtered = df2.loc[~df2['pupil_mixed'].isin(df1['pupil'])]

# create a new single column DataFrame with the pupil column
res = pd.concat((df1, filtered['pupil_mixed'].to_frame('pupil')))

print(res)
两种解决方案都使用 to_frame , 使用 name 参数,有效地更改列名称。

关于python - 如果 Pandas 中没有重复项,则将行值从一个 df append 到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65446572/

相关文章:

python - 使用 pandas 和字典中的数据生成加权平均值?

python - 如何以循环方式重复获取固定长度的列表片段?

pandas - 如何在 Pandas 中的 2 个 DataFrame 之间进行交集匹配?

python - Pandas 数据框中仅某些列的总和

单变量的 Python 箱线图

python - 如何检查pandas的过期日期?

python - 将我自己的描述属性添加到 Pandas DataFrame

scala - Spark : Extaract domain from email address in dataframe

python - 正则表达式删除字符串python中的单词

python - 使用内存但代码仍然永远运行