【发布时间】:2020-01-11 23:56:41
【问题描述】:
我查看了许多对此类问题的回复。我正在尝试按列合并两个文件,并且数据框仅共享代码和日期,因此如果我设置how='left',它会显示df_US[US_columns] 的数据和df_SEDOL_ESG[ESG_columns] 的标题列,但没有df_SEDOL_ESG[ESG_columns] 的数据。
同样,如果您设置how = 'right',则显示相反。我尝试设置 how = 'outer' 并且不会合并数据框而是单独列出它们。
在代码下方,我附上了示例数据框和数据类型,因为我想确保日期列采用日期时间格式。任何指导表示赞赏。
import numpy as np
import pandas as pd
path0 = 'K:/QuantTest/Data/ESG/'
path1 = 'K:/QuantTest/Data/US/'
def US_ESG():
df_US = pd.read_csv(path1 + 'df_US_weekly_expectationt.csv', dtype={'ticker':'str'})
df_US.rename(columns = {'Date': 'date'}, inplace = True)
df_US['date'] = pd.to_datetime(df_US['date'], format='%m/%d/%Y', errors = 'coerce')
df_SEDOL_ESG = pd.read_csv(path0 + 'SEDOL_ESGt.csv', dtype = {'ticker':'str'})
df_SEDOL_ESG.rename(columns = {'Ticker':'ticker'}, inplace=True)
df_SEDOL_ESG['date'] = pd.to_datetime(df_SEDOL_ESG['date'], format='%m/%d/%Y', errors = 'coerce')
US_columns = ['ticker', 'date', 'volume', 'closing_price']
ESG_columns = ['ticker', 'date','AllCategories_Insight','AllCategories_CategoryVolumeTTM']
df_US_ESG = df_US[US_columns].merge(df_SEDOL_ESG[ESG_columns], how='left', on = ['ticker', 'date'])
df_US_ESG.to_csv(path0 + 'US_ESGt.csv', index = False)
if __name__ == "__main__":
US_ESG()
【问题讨论】:
-
我可能认为合并选项不适用于您的情况。每行的ticker和data cols中的所有数据是否相同?你能提供一些 2 df 的数据行吗?
-
ticker date volume closing_price A 12/28/2018 2445101.5 65.96 AABA 12/28/2018 7113085.5 58.35 AAP 12/28/2018 1066813.625 155.46 AAPL 12/28/2018 43182216 156.23 ABC 12/28/2018 1286497.125 73.96
-
OrganizationTvlId ISIN Ownership SEDOL Ticker Company Name InstrumentCountry Sector Industry date AllCategories_Insight Materiality_Insight AllCategories_CategoryVolumeTTM Materiality_CategoryVolumeTTM 0002c46f-98ff-457e-83e0-47b466746572 US55027E1029 Public 2572109 A Luminex Corp. US Health Care Biotechnology 12/28/2018 56.12375097 58.27797253 4 3 0002c46f-98ff-457e-83e0-47b466746572 US55027E1029 公共 2572109 AABA Luminex Corp. 美国医疗保健生物技术 12/28/2018 56.37543414 58.48117502 4 3
-
以上,我附上了数据框。 df_US 中的数据是 df_SEDOL_ESG 的子集。此外,两个数据框中的数据(不包括股票代码和日期)都不同,这就是我尝试合并它们的原因。我需要使用 df_US['volume'] 和 df_US['closing_price'] 来计算具有 AllCategory_CategoryVolumeTTM 的新项目。感谢您的帮助