python - 如何用另一个数据帧中的元素填补一个 Pandas 数据帧中缺失的空白
问题描述
我正在努力弄清楚如何获取一个数据框中存在的元素,并根据他们的时间列使用它们来填充另一个数据框中的缺失值。
我有一个有分钟数据,但其中有一些差距(跨越几乎一天),另一个有每小时数据而没有差距。我想用每小时数据填充分钟数据中缺失的行,而不复制分钟数据中的小时数。
import pandas as pd
df1 = pd.DataFrame({'Unix Timestamp': [1444311660, 1444311720, 1444311780, 1444311840, 1444311900,
1444312140], 'price': [242.5, 242.5, 243.7, 290.0, 293.0, 287.0]})
df2 = pd.DataFrame({'Unix Timestamp': [1444311780, 1444311840, 1444311900, 1444311960, 1444312020],
'price': [243.7, 290.0, 293.0, 295.0, 294.0]})
print(df1.head())
print(df2.head())
df1
Unix Timestamp price
1444311660 242.5
1444311720 242.5
1444311780 243.7
1444311840 290
1444311900 293
1444312140 287
df2
Unix Timestamp price
1444311780 243.7
1444311840 290
1444311900 293
1444311960 295
1444312020 294
我已经尝试在 df2 中找到 Unix 时间戳不在 df1 中的 Unix 时间戳列表中的行,然后添加它们并根据 Unix 时间戳重新排序,但它给了我一个空数据框
missing = df1.loc[~df1['Unix Timestamp'].isin(df2['Unix Timestamp'])]
df1 = pd.concat([df1, missing], ignore_index=True, sort=False)
df1 = df1.sort_values(by='Unix Timestamp')
df1 = df1.reset_index(drop=True)
print(df1.head(10))
预期输出:
df1
Unix Timestamp price
1444311660 242.5
1444311720 242.5
1444311780 243.7
1444311840 290
1444311900 293
1444311960 295 ^
1444312020 294 ^
1444312140 287
添加了插入符号以提请注意添加了哪些行。我还需要使用整行,因为实际列中的列比价格多
有什么帮助吗?
解决方案
您可以.concat
使用数据框并摆脱欺骗drop_duplicates
。我还在第二个数据帧中添加了一added
列.assign()
,因此您可以看到从第二个数据帧到第一个数据帧中添加了哪些值。
df = (pd.concat([df1,df2.assign(added='^')])
.drop_duplicates(subset=['Unix Timestamp', 'price'])
.sort_values('Unix Timestamp')
.fillna(''))
df
Out[1]:
Unix Timestamp price added
0 1444311660 242.5
1 1444311720 242.5
2 1444311780 243.7
3 1444311840 290.0
4 1444311900 293.0
3 1444311960 295.0 ^
4 1444312020 294.0 ^
5 1444312140 287.0
推荐阅读
- drupal - 如何在drupal 8中显示子类别的所有产品
- python-3.x - Python 3 发送带有多个数据字段的 post 请求
- c - windows网络驱动器上的文件操作错误
- regex - 在括号之间的字符串中查找特定字符的所有出现,该字符串位于另一个字符串本身之后(REGEX)
- arrays - Matlab中3D点数组的熵函数?
- javascript - SyntaxError:JSON 解析错误意外的 EOF
- nrwl-nx - 将无服务器与 nrwl nx 集成
- quantlib - 如何在 QuantLib 中使用掉期利率助手来构建具有浮动腿固定天数的收益率曲线
- sql-server - 过去一小时聚合数据的自动报告生成
- php - 将 Google Recaptcha 添加到表单时出现问题