首页 > 解决方案 > 我有两个数据框 DF1 和 DF2,在特定索引处将满足 DF2 条件的行追加到 DF1 的最佳方法是什么?

问题描述

我试图在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()

然后正在考虑尝试设置某种循环,在附加 at 之前检查名称匹配index+1

标签: pythonpandas

解决方案


这应该工作

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

推荐阅读