python-3.x - 按条件联合 2 数据帧
问题描述
我有 2 张桌子。首先在df中:
Date X1 X2 X3
04.02.2019 2 2 12
05.02.2019 2 2 5
06.02.2019 1 2 1
df1 中的第二个:
Date X1 X2 X3
06.02.2019 1 1 2
07.02.2019 1 1 4
08.02.2019 2 2 2
09.02.2019 4 1 1
我需要用表 2 中的数据补充表 1。数据应取自日期、X1、X3 列,并且仅适用于条件日期 > 06.02.2019 的行。结果在df:
Date X1 X2 X3
04.02.2019 2 2 12
05.02.2019 2 2 5
06.02.2019 1 2 1
07.02.2019 1 4
08.02.2019 2 2
09.02.2019 4 1
解决方案
利用:
#convert columns to datetimes
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')
df1['Date'] = pd.to_datetime(df1['Date'], format='%d.%m.%Y')
#filter expected columns by condition and by columns in list
df2 = df1.loc[df1['Date'] > '2019-02-06', ['Date','X1','X3']]
#match by DatetimeIndex and add values from filtered DataFrame
df = df.set_index('Date').combine_first(df2.set_index('Date')).reset_index()
print (df)
Date X1 X2 X3
0 2019-02-04 2.0 2.0 12.0
1 2019-02-05 2.0 2.0 5.0
2 2019-02-06 1.0 2.0 1.0
3 2019-02-07 1.0 NaN 4.0
4 2019-02-08 2.0 NaN 2.0
5 2019-02-09 4.0 NaN 1.0
或者如果只需要将第二个 DataFrame 附加到第一个:
df2 = df1.loc[df1['Date'] > '2019-02-06', ['Date','X1','X3']]
df = pd.concat([df, df2], ignore_index=True, sort=True)
print (df)
Date X1 X2 X3
0 2019-02-04 2 2.0 12
1 2019-02-05 2 2.0 5
2 2019-02-06 1 2.0 1
3 2019-02-07 1 NaN 4
4 2019-02-08 2 NaN 2
5 2019-02-09 4 NaN 1
推荐阅读
- python - 迁移错误'没有迁移应用'也没有在 django 的 postgresql 中添加表
- apache-camel - 如何在apache骆驼的URL中使用“移动”时重命名文件
- jquery - 如何水平滚动要放置在右侧的 div?
- java - Java-无法将 1000 批插入表中
- c++ - 解决产生无限循环的数组问题时遇到问题
- emacs - Emacs Diary 的 diary-float 查询
- sql - SQL Group By 和更改分组值
- c# - 复选框中的 asp-for 在 asp.net 核心中抛出和错误
- php - 如何在php中将新数组值添加到标头
- java - Jmeter JavaSampler - 我们可以传递已经在 Jmeter WDS 中创建的 WebDriver 实例吗?