在最新日期之前加入两个熊猫数据框

时间:2019-03-22 11:10:35

标签: pandas

我有两个数据框(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

1 个答案:

答案 0 :(得分:0)

我认为您需要这样做。

second dataframe的日期顺序对ascending进行排序,然后将drop_duplicatekeep='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'))

注意:由于您无法发布示例输入和输出,因此我假设像上面一样使用列名和变量。为了获得准确的结果,请提供样本输入和输出。