gpt4 book ai didi

python - 用 Panadas 按一列比较两个 DataFrame 并返回三个不同的输出

转载 作者:太空狗 更新时间:2023-10-29 21:08:14 25 4
gpt4 key购买 nike

我是 Python 和编码的初学者。我需要帮助比较两个不同长度和不同列标签的数据帧,除了一个。两个数据集之间相同的列是我要用来比较数据帧的列。我的数据如下所示:

    df:  'fruits'  'trees'      'sports'    'countries'  

bananas mongolia basketball Spain
grapes Oak rugby Thailand
oranges Osage Orange baseball Egypt
apples Maple golf Chile

df2: 'cars' 'flowers' 'countries' 'vegetables'

Audi Rose Spain Carrots
BMW Tulip Nigeria Celery
Honda Dandelion Egypt Onion

我会根据“国家”列比较这两个数据框,并在各自的数据框中创建三个单独的输出。我一直在使用 Pandas 并使用 pd.concat 将 df1 和 df2 合二为一。我还想保留数据框其余部分的行,即使它们不匹配。

这是我想要的输出:

输出 # 1:df 中的值不在 df2 中:

    d3:  'fruits'  'trees'      'sports'    'countries'  

grapes Oak rugby Thailand
apples Maple golf Chile

输出 # 2:df2 中的值不在 df 中

        df4: 'cars'  'flowers'   'countries'    'vegetables'

BMW Tulip Nigeria Celery

输出 # 3:df 和 df2 中的值(来自不同数据帧的列组合在一起。)

df5: 'fruits'  'trees' 'sports'  'cars' 'flowers' 'countries' 'vegetables'  

bananas mongolia basketball Audi Rose Spain Carrots
Oranges Osage Orange baseball Honda Dandelion Egypt Onion

希望这一切都有意义。我已经尝试了很多不同的东西(isin、DataFrame.diff 和 .difference、df-df2、numpy 数组等)我已经看了一遍,但找不到我要找的东西。任何帮助将不胜感激!谢谢!

最佳答案

设置引用

from StringIO import StringIO
import pandas as pd

txt1 = """fruits,trees,sports,countries
bananas,mongolia,basketball,Spain
grapes,Oak,rugby,Thailand
oranges,Osage,Orange baseball,Egypt
apples,Maple,golf,Chile"""

txt2 = """cars,flowers,countries,vegetables
Audi,Rose,Spain,Carrots
BMW,Tulip,Nigeria,Celery
Honda,Dandelion,Egypt,Onion"""

df = pd.read_csv(StringIO(txt1))

df2 = pd.read_csv(StringIO(txt2))

解决方案

def outer_parts(df1, df2):
df3 = df1.merge(df2, indicator=True, how='outer')
return {n: g.drop('_merge', 1) for n, g in df3.groupby('_merge')}


dfs = outer_parts(df, df2)

演示

dfs['both']

enter image description here

dfs['left_only']

enter image description here

dfs['right_only']

enter image description here

关于python - 用 Panadas 按一列比较两个 DataFrame 并返回三个不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com