python – 使用部分datetime索引连接数据帧

python – 使用部分datetime索引连接数据帧,第1张

概述我有两个带有日期时间索引数据帧. import pandas as pdd = {'dat': ['2016-01-01', '2016-01-02', '2016-01-03', '2017-01-01', '2017-01-02', '2017-01-03'],'x': [1, 2, 3, 4, 5, 6]}df1 = pd.DataFrame(d)df1.set_index(['d 我有两个带有日期时间索引的数据帧.

import pandas as pdd = {'dat': ['2016-01-01','2016-01-02','2016-01-03','2017-01-01','2017-01-02','2017-01-03'],'x': [1,2,3,4,5,6]}df1 = pd.DataFrame(d)df1.set_index(['dat'],inplace=True)df1.index = pd.to_datetime(df1.index)d = {'dat': ['2016-01-01','2017-01-01'],'y': [10,11]}df2 = pd.DataFrame(d)df2.set_index(['dat'],inplace=True)df2.index = pd.to_datetime(df2.index)

DF1:

xdat          2016-01-01  12016-01-02  22016-01-03  32017-01-01  42017-01-02  52017-01-03  6

DF2:

ydat           2016-01-01  102017-01-01  11

我想只使用索引的年份和月份加入他们.
所以输出结果如下:

DF3:

x  ydat          2016-01-01  1  10 2016-01-02  2  102016-01-03  3  102017-01-01  4  112017-01-02  5  112017-01-03  6  11

我试图加入他们

df1.join(df2,how='inner')

而且我知道我可以像这样提取年份和月份:

df1.index.map(lambda x: x.strftime('%Y-%m'))df2.index.map(lambda x: x.strftime('%Y-%m'))

但我想知道如何将所有这些结合起来以达到预期的效果?

非常感谢

解决方法 您要合并的信息未在任何地方明确定义.当我们合并而不破坏它时,没有很好的方法可以将日期保留在索引中.因此,我们将索引移动到适当的数据框并创建两个要合并的新列.即,年和月.我将这部分包装在一个函数中,以便更好地了解发生了什么.

def f(df):    df = df.reset_index()    return df.assign(year=df.dat.dt.year,month=df.dat.dt.month)df = f(df1).merge(f(df2),on=['year','month'],suffixes=['','_'])df.set_index('dat')[['x','y']]            x   ydat              2016-01-01  1  102016-01-02  2  102016-01-03  3  102017-01-01  4  112017-01-02  5  112017-01-03  6  11

这是使用pd.Index.map和to_period的不同概念.从df2创建字典映射,将年/月期对象转换为y列中的对应值.然后使用map将df1.index中的周期化日期映射到正确的y值.

m = dict(zip(df2.index.to_period('M'),df2.y))df1.assign(y=df1.index.to_period('M').map(m.get))            x   ydat              2016-01-01  1  102016-01-02  2  102016-01-03  3  102017-01-01  4  112017-01-02  5  112017-01-03  6  11

建立

dates1 = ['2016-01-01','2017-01-03']df1 = pd.DataFrame({'x': range(1,7)},pd.DatetimeIndex(dates1,name='dat'))dates2 = ['2016-01-01','2017-01-01']df2 = pd.DataFrame({'y': [10,11]},pd.DatetimeIndex(dates2,name='dat'))
总结

以上是内存溢出为你收集整理的python – 使用部分datetime索引连接数据帧全部内容,希望文章能够帮你解决python – 使用部分datetime索引连接数据帧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存