我有两个数据帧DF1和DF2,在特定索引处追加从DF2到DF1有条件的行的最佳方法是什么?

时间:2019-10-23 12:46:01

标签: python pandas

我试图在dataframe1中每个组的末尾将dataframe2的行追加到dataframe1,但仅将dataframe2中的那些行与dataframe 1中的列值匹配(在这种情况下:与“ Name”匹配)。

如果我具有由以下数据给定的dataframe1:

data = {
    'Name':['Jill', 'Jill', 'Jill', 'Jill', 'Ryan',
            'Ryan','Lilian', 'Jack', 'Jack', 'Jack'],
    'Age': [15, 20, 25, 30, 23, 23, 45, 24, 65, 115]
}

df1 = pd.DataFrame(data)

df1

data2 = {
        'Name':['Jack', 'Ryan',
            'Lilian', 'Jill'],
        'Gender': ['m', 'm', 'f', 'f']
}

df2 = pd.DataFrame(data2)

df2

我希望看到:

  Name   Age Gender
0 Jill   15  
1 Jill   20
2 Jill   25
3 Jill   30
4 Jill       f
5 Ryan   23
6 Ryan   23  
7 Ryan       m
8 Lilian 45
9 Lilian     f
10 Jack  24
11 Jack  65
12 Jack  115 
13 Jack      m

我找到了上次出现的groupby组的原始索引,并将其放入列表中。

使用df1.index.values.tolist()

然后在考虑尝试设置某种循环,以在添加到index+1之前检查名称是否匹配。

1 个答案:

答案 0 :(得分:1)

这应该有效

compare = df1.Name.unique()
df3 = df2[df2['Name'].isin(compare)]
df4 = df1.append(df3)
df5 = df4.sort_values(['Name','Age'])
df5 = df5.reset_index(drop=True)
print(df5)

输出:

      Age Gender    Name
0    24.0    NaN    Jack
1    65.0    NaN    Jack
2   115.0    NaN    Jack
3     NaN      m    Jack
4    15.0    NaN    Jill
5    20.0    NaN    Jill
6    25.0    NaN    Jill
7    30.0    NaN    Jill
8     NaN      f    Jill
9    45.0    NaN  Lilian
10    NaN      f  Lilian
11   23.0    NaN    Ryan
12   23.0    NaN    Ryan
13    NaN      m    Ryan