python - 按日期和列名称匹配 2 个数据框以获取值

标签 python python-3.x pandas dataframe

我有两个数据框(它们已经是数据框格式,但为了便于说明,我首先将它们创建为字典):

first = {
        'Date':['2013-02-14','2013-03-03','2013-05-02','2014-10-31'],
        'Name':['Felix','Felix','Peter','Paul']}

df1 = pd.DataFrame(first)

还有

 second = {
        'Date':['2013-02-28','2013-03-31','2013-05-30','2014-10-31'],
        'Felix':['Value1_x','Value2_x','Value3_x','Value4_x'],
        'Peter':['Value1_y','Value2_y','Value3_y','Value4_y']}


df2 = pd.DataFrame(second)

现在,我想向 df1 添加一个附加列,其中包含 df2,如果 df1.Date 按年和月匹配 df2.Date(该日期通常不匹配,因为 df1 包含月末日期)并且如果 的列名称>df2 与相应的 df1.Name 值匹配。

所以结果应该是这样的:

df_new = {
        'Date':['2013-02-14','2013-03-03','2013-05-02','2014-10-31'],
        'Name':['Felix','Felix','Peter','Paul'],
        'Values':['Value1_x','Value2_x','Value3_y','NaN']}

df_new = pd.DataFrame(df_new)

您对如何解决这个问题有什么建议吗?

我考虑过为创建额外的列(df1['year']= df1['Date'].dt.year) 然后匹配 df1[(df1['year'] == df2['year']) & (df1['month'] == df2['month'])] 并调用df2.column 但我不知道如何将所有内容放在一起

最佳答案

一般来说,尽量不要将您的数据集作为图像发布,因为那样就很难帮助您了。

我认为最简单的方法是在每个数据框中创建一个列,其中日期四舍五入到每月的第一天。

df1['Date_round'] = df1['Date'] - pd.offsets.MonthBegin(1)
df2['Date_round'] = df2['Date'] - pd.offsets.MonthBegin(1)

然后使用melt reshape df2

df2_reshaped = df2.melt(id_vars=['Date','Date_round'], var_name='Name', value_name='Values')

然后您可以使用 pd.merge 连接 Date_roundName 上的数据框。

df = pd.merge(df1, df2_reshaped.drop('Date', axis=1), how='left', on=['Date_round', 'Name'])

关于python - 按日期和列名称匹配 2 个数据框以获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57474453/

相关文章:

python - Django 中按降序排列类别

javascript - Python. Selenium 。找不到现有元素。如何切换框架

python 看门狗 : Is there a way to pause the observer?

python - 绑定(bind)到 tkinter 中每个键的键绑定(bind)

Python Panda.read_csv 四舍五入得到导入错误?

python - 部分嵌套 for 循环

python-3.x - redis - 如何创建事务

python - 如何在Debian 10上安装python3.8?

python - Pandas:将包含字符串的数据帧写入多行格式的 xlsx

python - pandas 如何使用 groupby 在标签中按日期对列进行分组?