在一个共享相同索引的数据框中合并行

时间:2020-03-05 19:05:12

标签: pandas dataframe filter

我想在数据框中使用唯一的DateTimeIndex。因此,我想将具有相同索引的两行合并为一行。在此合并期间,我想对每个列应用一个自定义公式器(例如avg/meanmaxmin)。

数据中提出的想法:

具有时间序列数据的数据框

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上的valuemax上的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过正,因为-从我所看到的-它迫使我稍后对其进行迭代。我还想了解重复数据删除如何在熊猫中更紧密地工作。

谢谢!

2 个答案:

答案 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'})