循环和合并/更新数据

时间:2019-07-12 16:02:30

标签: python pandas merge group-by

我有两个看起来像这样的数据框:

DF1:

x_id     y_id 
 1       NaN
 2       NaN
 3       NaN 
 4       NaN
 5       NaN
 6       NaN 


DF2:

x_id     y_id 
 1       1
 2       1
 3       1 
 4       2
 5       2
 6       2
 1       3
 3       3 
 :       :
 :       :
 3       y(i)

因此,我想在循环的每次迭代中将DF_2中的y_id合并/插入到DF1中的y_id中。

到目前为止我所拥有的:

count = df2['y_id'].unique()
for i in count: 
    new_df = df1.merge(df2['y_id']==i], how='inner', left_on='x_id', right_on='x_id')

尽管这会为循环的每次迭代创建一个新的数据框,但我认为应该有一种更好的方法。

我希望我的最终数据框看起来像:

DF3:

x_id     y_id 
 1       3
 2       1
 3       y(i) 
 4       2
 5       2
 6       2

基本上,我想做的是将y_id分组为DF2并按排序顺序将它们合并。因此,我们可以在DF2中看到值1和3的y_id = 1,然后在列的更下方,它们的y_id =3。由于三个值均大于1,因此我想使用该值(例如,如果是处理日期等)

我要执行的操作类似于SQL中的更新语句,其中我们更新列并设置row = y_id,并使用最新值。

希望我已经充分解释了,任何问题都可以问。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以在drop_duplicates之前merge

df1=df1.drop('y_id',1).merge(df2.drop_duplicates('x_id',keep='last'),on='x_id')
df1
Out[469]: 
   x_id  y_id
0     1     3
1     2     1
2     3     3
3     4     2
4     5     2
5     6     2