我试图在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
之前检查名称是否匹配。
答案 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