我想在数据框中使用唯一的DateTimeIndex
。因此,我想将具有相同索引的两行合并为一行。在此合并期间,我想对每个列应用一个自定义公式器(例如avg/mean
,max
,min
)。
数据中提出的想法:
具有时间序列数据的数据框
df_orig
+----------------------------+-------+--------+
| | value | value2 |
| ts | | |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.711111 | 10 | 10 |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.766666 | 1 | 3 |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.766666 | 2 | 6 |
+----------------------------+-------+--------+
| 2019-09-17T09:39:39.010101 | 2 | 4 |
+----------------------------+-------+--------+
我会尝试标记那些行,它们的索引不是唯一的。像这样:
df_marked_duplicated
+----------------------------+-------+--------+-----------+
| | value | value2 | is_unique |
| ts | | | |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.711111 | 10 | 10 | 1 |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 1 | 3 | 0 |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 2 | 6 | 0 |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:39.010101 | 2 | 4 | 1 |
+----------------------------+-------+--------+-----------+
,以便以后可以计算avg
上的value
和max
上的value2
。因此目标df如下:
df_target
+----------------------------+-------+--------+-----------+
| | value | value2 | is_unique |
| ts | | | |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.711111 | 10 | 10 | 1 |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 1.5 | 6 | 0 |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:39.010101 | 2 | 4 | 1 |
+----------------------------+-------+--------+-----------+
我不确定pd.groupby
是否有点矫kill过正,因为-从我所看到的-它迫使我稍后对其进行迭代。我还想了解重复数据删除如何在熊猫中更紧密地工作。
谢谢!
答案 0 :(得分:1)
不仅仅是groupby
:
df.groupby('ts').agg({'value':'mean', 'value2':'max'})
答案 1 :(得分:0)
aggregate
对象上的groupby
函数的Pandas实现比任何自定义实现都具有更高的性能。您还可以使用dict
个函数对不同的列应用不同的聚合方法。
所以在你的情况下
df.groupby(['ts'].agg({'value': 'mean', 'value2': 'max'})