所以我是熊猫的新手,在这里超重。我有两个csv文件:一个是我感兴趣的作者列表(数据框1),第二个文件是出版公司及其出版日期的作者总列表(数据框2)。
我需要使用数据框1来查看数据框2中是否存在完全匹配的名称。如果存在匹配项(可以有多个匹配项),我想提取最小日期。例如:对于df 1中的Jake Smith,在df 2中可能有2个匹配项,我想将最早的发布日期添加到数据帧1中。
df
first name|last name |
df 2
first name|last name| publication date
所需
如果作者在df1中,则在df1中添加最低发布日期
这就是我所做的。我从csv文件创建了数据帧,并连接了所有作者文件以创建df2。然后,我对名字和姓氏进行了内部联接,因为我认为这将是命名匹配的最佳方法。我不断收到错误消息。然后,我使用了一个group by来尝试获取最短日期。
import pandas as pd
files_path= 'C:'
df_1 = pd.read_csv( files_path + '/author_desired.csv', sep="|")
df_merged= pd.read_csv(files_path +'/master_list.csv', sep="|")
df_final= pd.join(df_1, df_merged, on= ['LAST_NAME' , 'FIRST_NAME'], how='inner')
df_final.groupby(['FIRST_NAME', 'LAST_NAME']).max()['FIRST_PUB_DATE']
df_final.to_csv(files_path + "/merged_file.csv")
请帮助
答案 0 :(得分:0)
lis1=[{'FIRST_NAME':'James','Last_Name':'Cameran','City':'NYC'},{'FIRST_NAME':'Samuel','Last_Name':'Smith','City':'London'},{'FIRST_NAME':'Kane','Last_Name':'Win','City':'NYC'}]
lis2=[{'FIRST_NAME':'James','Last_Name':'Cameran','Pub. Year':2011},{'FIRST_NAME':'Kane','Last_Name':'Win','Pub. Year':2010},{'FIRST_NAME':'James','Last_Name':'Cameran','Pub. Year':2018},{'FIRST_NAME':'Kane','Last_Name':'Win','Pub. Year':2014}]
import pandas as pd
df1=pd.DataFrame(lis1)
df2=pd.DataFrame(lis2)
print(df1)
print(df2)
df1['Full_Name']=df1.FIRST_NAME+" "+df1.Last_Name
df2['Full_Name']=df2.FIRST_NAME+" "+df2.Last_Name
merged=pd.merge(df1,df2)[['Full_Name','Pub. Year']]
df1['Pub. Year']=[merged[merged.Full_Name==fullname]['Pub. Year'].min() for fullname in df1.Full_Name]
print(df1)
输出:
City FIRST_NAME Last_Name
0 NYC James Cameran
1 London Samuel Smith
2 NYC Kane Win
FIRST_NAME Last_Name Pub. Year
0 James Cameran 2011
1 Kane Win 2010
2 James Cameran 2018
3 Kane Win 2014
City FIRST_NAME Last_Name Full_Name Pub. Year
0 NYC James Cameran James Cameran 2011.0
1 London Samuel Smith Samuel Smith NaN
2 NYC Kane Win Kane Win 2010.0