Python 基于条件连接数据集

Python 基于条件连接数据集,python,pandas,Python,Pandas,我有三个数据集,它们的列名称相同,但数据不同 Dataset 1 Date Full Name Texts Country Read 02/05/2017 Jack Smith Grey ranks... UK True 02/05/2017 Mary Jane Once upon a time France

我有三个数据集,它们的列名称相同,但数据不同

Dataset 1

Date              Full Name           Texts         Country            Read
02/05/2017      Jack Smith       Grey ranks...        UK               True  
02/05/2017      Mary Jane        Once upon a time    France            False
...
24/06/2019     Luke Martyn       Bottled...          USA               True
对于另一个数据集2也是如此

Date              Full Name           Texts         Country            Read
02/05/2017      Jack Smith       The story ...        UK               True  
04/05/2017      Mary Jane        She saw ...         France            False
...
12/03/2019     Chris Martyn       From Mexico ...     Mexico           False
数据集3

Date              Full Name           Texts         Country            Read
23/02/2017      Jack Smith          They said  ...        UK               True  
01/05/2017      Martin O'Connell    When I was young ...  Ireland          True
...
14/07/2018     Laura Cross          My family ...         Italy            True
我想从这些数据集中获得以下信息:

  • 唯一/不同的名称,即未包含在一个或多个数据集中的名称(但在这种情况下,我想知道是否可能知道它们包含在/缺少的数据集中)
  • 通用名称,即所有三个数据集中或其中两个数据集中的名称(同上)
有些人在所有三个数据集中;有些人则不然。当然,如果人们是一样的,我有相同的国家信息,但不同的文本。我可能应该加入这三个数据集中,看看这三个数据集中有哪些唯一的名称,以及它们的不同之处。而且,是的,可能需要创建一个新列来获取有关数据集的信息,该数据集包括或不包含名称

我知道如何无条件地连接这三个数据集。
但是,我需要根据一个条件获取上述信息,例如,当
Read=True

IIUC时,您可以使用
concat
键来列出您的源数据帧,然后只需简单命名聚合
groupby
.agg

df = (
    pd.concat([df1, df2, df3], keys=["df1", "df2", "df3"])
    .reset_index(0)
    .rename(columns={"level_0": "key"})
)


df.groupby(['Full Name']).agg(name_occurance=('key','count'),
                             source=('key',','.join))

                  name_occurance       source
Full Name                                    
Chris Martyn                   1          df2
Jack Smith                     3  df1,df2,df3
Laura Cross                    1          df3
Luke Martyn                    1          df1
Martin O'Connell               1          df3
Mary Jane                      2      df1,df2

IIUC,您可以使用
concat
键来列出源数据帧,然后只需简单命名聚合
groupby
.agg

df = (
    pd.concat([df1, df2, df3], keys=["df1", "df2", "df3"])
    .reset_index(0)
    .rename(columns={"level_0": "key"})
)


df.groupby(['Full Name']).agg(name_occurance=('key','count'),
                             source=('key',','.join))

                  name_occurance       source
Full Name                                    
Chris Martyn                   1          df2
Jack Smith                     3  df1,df2,df3
Laura Cross                    1          df3
Luke Martyn                    1          df1
Martin O'Connell               1          df3
Mary Jane                      2      df1,df2

这回答了你的问题吗@新手,我已经看过了,它非常有用。但我想知道如何根据条件加入数据集。这是否回答了您的问题@新手,我已经看过了,它非常有用。但我想知道如何根据条件加入数据集。非常感谢@datanearo。关于条件(Read=True),它已经包含在你的代码中了,还是我应该设置它?@Math你是说
df[df['Read']='True'].groupby(['Full Name']).agg(Name_occurrence=('key','count'),source=('key','join))
非常感谢@datanoveler。关于条件(Read=True),它已经包含在你的代码中了,还是我应该设置它?@Math你是说
df[df['Read']='True'].groupby(['Full Name']).agg(Name_occurance=('key','count'),source=('key','join))