Python 基于case语句的分组

Python 基于case语句的分组,python,pandas,dataframe,Python,Pandas,Dataframe,我为每个孩子准备了两行,我试图根据孩子的名字分组,并在同一行中压平父母的名字 CHILD_FIRST_NAME CHILD_LAST_NAME PARENT_FIRST_NAME PARENT_LAST_NAME PARENT_GENDER Sarah Marshal David Marshal M Sarah Marshal Caren Marshal

我为每个孩子准备了两行,我试图根据孩子的名字分组,并在同一行中压平父母的名字

CHILD_FIRST_NAME CHILD_LAST_NAME PARENT_FIRST_NAME PARENT_LAST_NAME PARENT_GENDER
Sarah            Marshal         David             Marshal          M
Sarah            Marshal         Caren             Marshal          F
Kiran            Mishra          Raj               Mishra           M
Kiran            Mishra          Geetha            Mishra           F`
输出应该是

CHILD_FIRST_NAME CHILD_LAST_NAME FATHER_FIRST_NAME FATHER_LAST_NAME MOTHER_FIRST_NAME MOTHER_LAST_NAME
Sarah            Marshal         David             Marshal          Caren             Marshal
Kiran            Mishra          Raj               Mishra           Geetha            Mishra
我尝试了这段代码,它只帮助我将“父姓”展平,但无法找到包含“父姓”的选项

df.groupby(['CHILD_FIRST_NAME'、'CHILD_LAST_NAME'、'PARENT_GENDER'])['PARENT_FIRST_NAME'].max().unstack().rename(列={'M':'FATHER_FIRST_NAME','F':'MOTHER_FIRST_NAME'))
这里有两种方法:

方法1:将索引设置为父项的子项和性别,然后取消堆叠性别。按性别选择列并重命名,然后重置索引

df2 = (
    df
    .set_index(['CHILD_FIRST_NAME', 'CHILD_LAST_NAME', 'PARENT_GENDER'])
    .unstack()
    .sort_index(axis=1, level=1, ascending=False)
)
df2.columns = ['FATHER_FIRST_NAME', 'FATHER_LAST_NAME', 'MOTHER_FIRST_NAME', 'MOTHER_LAST_NAME']
df2 = df2.reset_index()

>>> df2
  CHILD_FIRST_NAME CHILD_LAST_NAME FATHER_FIRST_NAME FATHER_LAST_NAME  \
0            Sarah         Marshal             David          Marshal   
1            Kiran          Mishra               Raj           Mishra   

  MOTHER_FIRST_NAME MOTHER_LAST_NAME  
0             Caren          Marshal  
1            Geetha           Mishra  
方法2:根据性别对数据帧进行子集,并合并回父对象(母亲或父亲,视情况而定)

只需按“CHILD\u FIRST\u NAME”创建groupby(),然后创建两个新数据集。第一个孩子只有父亲(df['parent_gender']='M'),另一个孩子只有母亲。在每个新闻数据帧中按“CHILD\u FIRST\u NAME”创建另一个groupby()。最后,使用“CHILD_FIRST_NAME”作为关键变量合并这三个数据集
df2 = df[['CHILD_FIRST_NAME', 'CHILD_LAST_NAME']].drop_duplicates()

df_temp = (
    df
    .loc[df['PARENT_GENDER'].eq('M')]
    .rename(columns={'PARENT_FIRST_NAME': 'FATHER_FIRST_NAME',
                     'PARENT_LAST_NAME': 'FATHER_LAST_NAME'})
    .drop(columns='PARENT_GENDER')
)
df2 = df2.merge(df_temp, on=['CHILD_FIRST_NAME', 'CHILD_LAST_NAME'])

df_temp = (
    df
    .loc[df['PARENT_GENDER'].eq('F')]
    .rename(columns={'PARENT_FIRST_NAME': 'MOTHER_FIRST_NAME',
                     'PARENT_LAST_NAME': 'MOTHER_LAST_NAME'})
    .drop(columns='PARENT_GENDER')
)
df2 = df2.merge(df_temp, on=['CHILD_FIRST_NAME', 'CHILD_LAST_NAME'])