如何聚合集合列?

2024-06-02 04:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas datafame,其中特定列中的行是id的集合。我希望在15分钟的时间内聚合并找到所有这样唯一的id

timestamp  |         ids           |  some_int
00:03:00     {id1, id2, id3}           5
00:10:00     {id2, id4, id7, id10}     9
00:25:00     {id7, id22, id24}         10
00:45:00     {id23, id30}              24


df.resample('15min').agg({'ids': ??, 'some_int': sum)

我在ids列上尝试过sum和其他一些转换,但还没有完全实现。在


Tags: ididspandas时间sometimestampintsum
2条回答

set更改为list,然后使用sum

df.ids=df.ids.apply(list)
s=df.resample('15min').agg({'ids': 'sum', 'some_int': 'sum'})
s.loc[s.ids.eq(False),'ids']=''
s.ids=s.ids.apply(set)
s
Out[134]: 
                                                 ids  some_int
timestamp                                                     
2018-02-27 00:00:00  {id2, id4, id7, id10, id1, id3}        14
2018-02-27 00:15:00                {id24, id7, id22}        10
2018-02-27 00:30:00                               {}         0
2018-02-27 00:45:00                     {id23, id30}        24

有一种方法。由于某些原因,我无法使aggset.union一起工作,所以我执行了2groupby操作并将它们连接起来。在

import pandas as pd, numpy as np
from itertools import chain

df = pd.DataFrame([['00:03:00', {'id1', 'id2', 'id3'}, 5],
                   ['00:10:00', {'id2', 'id4', 'id7', 'id10'}, 9],
                   ['00:25:00', {'id7', 'id22', 'id24'}, 10],
                   ['00:45:00', {'id23', 'id30'}, 24]],
                  columns=['timestamp', 'ids', 'some_int'])

df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.set_index('timestamp')

x = df.resample('15min')['ids'].apply(chain.from_iterable).map(set).reset_index()
y = df.resample('15min')['some_int'].apply(sum).reset_index()

pd.merge(x, y, how='left')

#             timestamp                              ids  some_int
# 0 2018-02-27 00:00:00  {id1, id4, id2, id3, id10, id7}        14
# 1 2018-02-27 00:15:00                {id22, id7, id24}        10
# 2 2018-02-27 00:30:00                               {}         0
# 3 2018-02-27 00:45:00                     {id30, id23}        24

相关问题 更多 >