我有两个数据框(d-一个包含date1,名称),另一个(d1)包含(date2,名称和等级)。我需要将这两个放在(名称)上,以便为第一个数据帧中的每一行分配截至date1的最新排名。
,即d1.name = d2.name,而d2.date2是d1.date1的最新日期
最简单的方法是什么。
enter code here
In [1]: import pandas as pd
In [6]: d = pd.DataFrame({'date' : ['20070105', '20130105', '20150102',
'20170106', '20190106'], 'name': ['a', 'b', 'a', 'b', 'a']})
In [7]: d
Out[7]:
date name
0 20070105 a
1 20130105 b
2 20150102 a
3 20170106 b
4 20190106 a
In [4]: d1 = pd.DataFrame({'date' : ['20140105', '20160105', '20180103',
'20190106'], 'rank' : [1, 2, 1,5], 'name': ['a', 'b', 'a', '
...: b']})
In [5]: d1
Out[5]:
date name rank
0 20140105 a 1
1 20160105 b 2
2 20180103 a 2
3 20190106 b 1
我希望将'rank'添加到'd'并具有如下输出:
enter code here
date name Rank
0 20070105 a NaN
1 20130105 b NaN
2 20150102 a 1
3 20170106 b 2
4. 20190106 a 2
答案 0 :(得分:0)
我认为您需要这样做。
按second dataframe
的日期顺序对ascending
进行排序,然后将drop_duplicate
与keep='last'
进行排序,现在将pd.merge
应用于第一个数据帧和已处理的第二个数据帧。 / p>
df2=df2.sort_values(on='date')
temp=df2.drop_duplicates(subset=['name'], keep='last')
print (pd.merge(df1,temp, on=['name'], how='left'))
注意:由于您无法发布示例输入和输出,因此我假设像上面一样使用列名和变量。为了获得准确的结果,请提供样本输入和输出。