python - 如何合并两个重叠的数据框
问题描述
我需要编写接收新数据帧并将它们与现有数据帧合并的代码。这些行按日期排序,但不幸的是经常有重叠。例如
Transaction_Date transaction
1330 26/05/2017 2997.71
1327 30/05/2017 -1394.59
1329 30/05/2017 -2650.00
1328 30/05/2017 664.00
和
1329 30/05/2017 -2650.00
1328 30/05/2017 664.00
1326 31/05/2017 374.79
1324 01/06/2017 -160.00
1325 01/06/2017 -27.62
假设第一个数据帧被调用df1
,第二个被调用df2
,我如何合并它们以消除重叠部分中的重复项?
预期的结果应该是:
Transaction_Date transaction
1330 26/05/2017 2997.71
1327 30/05/2017 -1394.59
1329 30/05/2017 -2650.00
1328 30/05/2017 664.00
1326 31/05/2017 374.79
1324 01/06/2017 -160.00
1325 01/06/2017 -27.62
解决方案
我相信需要concat
通过以下索引值删除重复duplicated
项boolean indexing
:
df = pd.concat([df1, df2])
df = df[~df.index.duplicated()]
完整示例:
import pandas as pd
df = pd.DataFrame({
'date': pd.date_range('2018-01-01', periods=7, freq='12H'),
'index': [1330, 1327, 1329, 1328, 1326, 1324, 1325]
}).set_index('index')
df1 = df.iloc[[0,1,2,3]]
df2 = df.iloc[[2,3,4,5,6]]
df = pd.concat([df1, df2])
df = df[~df.index.duplicated()]
print(df)
回报:
date
index
1330 2018-01-01 00:00:00
1327 2018-01-01 12:00:00
1329 2018-01-02 00:00:00
1328 2018-01-02 12:00:00
1326 2018-01-03 00:00:00
1324 2018-01-03 12:00:00
1325 2018-01-04 00:00:00
推荐阅读
- dart - 一行中的多个带有填充的文本字段
- c - C 复利递归函数
- mysql - 在 MySQL 中为两组不同的相关 ID 引用一个字段
- spring-kafka - 访问消费者当前偏移量的状态?
- kotlin - 错误:使用@OptionalExpectation 注释的声明只能在通用模块源中使用
- python - 使用 Cloud Scheduler 触发 Cloud Functions 的 HTTP
- ios - 对于 iOS 中的视图外内容,Nativescript 布局不正确
- java - 将数组值分配给整数和不生成随机数组(java)
- android - 如何配置 Tensorflow 对象检测 Android 演示以使用 Inception v2
- matlab - Matlab:为单个组着色,而不是组内的单个条