我有两个看起来像这样的数据框:
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,并使用最新值。
希望我已经充分解释了,任何问题都可以问。
谢谢
答案 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