gpt4 book ai didi

python - 按时间分组,然后仅当这些条目存在于列表中时才计算唯一条目 [Panda]

转载 作者:行者123 更新时间:2023-11-28 19:47:06 25 4
gpt4 key购买 nike

考虑以下 Pandas 数据框“df”和 python 列表“my_list”。

df =

timestamp  address    type
1 1 A
2 9 B
3 3 A
4 6 B
5 6 B
6 2 B
7 3 A
8 2 B
9 1 B
10 3 A
11 3 A
12 3 A

我的列表=

[1, 2, 3]

现在我想要的是按 3 秒 bin 中的时间戳列对数据帧进行分组,并且仅当“my_list”中存在地址时才计算唯一“类型”的数量。

预期的输出应该是这样的:

timestamp   A    B    
1 2 0 #One "B" ignored, because address=9 is not in my_list
4 0 1 #Two "B" ignored because address is not in "my_list
7 1 2 #Two "B" with unique addresses, and one "A"
10 1 0 #Three rows with Type="A", but addresses are is same.

请注意,时间戳值最初采用时间戳格式,我们可以应用 df.groupby 和 pd.TimeGrouper 函数将行分组为 3 秒列。

Appreciate only Pandas (Python) based answers.

对于任何混淆,我们深表歉意。我尽量保持简单。

--汗

最佳答案

使用:

#convert index to triples
df.index = df.index // 3
#filter rows by condition
df1 = df[df['address'].isin(my_list)]
#get unique numbers and reshape
df1 = df1['address'].groupby([df1.index, df1['type']]).nunique().unstack(fill_value=0)
#add timestamps
df1.index = df['timestamp'].groupby(df.index).first()
print (df1)
type A B
timestamp
1 2 0
4 0 1
7 1 2
10 1 0

设置:

print (df)
timestamp address type
0 1 1 A
1 2 9 B
2 3 3 A
3 4 6 B
4 5 6 B
5 6 2 B
6 7 3 A
7 8 2 B
8 9 1 B
9 10 3 A
10 11 3 A
11 12 3 A

datetimes 的解决方案更简单:

#sample datetimes 
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='D',
origin=pd.Timestamp('2017-01-01'))

print (df)
timestamp address type
0 2017-01-02 1 A
1 2017-01-03 9 B
2 2017-01-04 3 A
3 2017-01-05 6 B
4 2017-01-06 6 B
5 2017-01-07 2 B
6 2017-01-08 3 A
7 2017-01-09 2 B
8 2017-01-10 1 B
9 2017-01-11 3 A
10 2017-01-12 3 A
11 2017-01-13 3 A

df1 = df[df['address'].isin(my_list)]
df1 = (df1.groupby([pd.Grouper(freq='3D', key='timestamp'), 'type'])['address']
.nunique()
.unstack(fill_value=0) )
print (df1)
type A B
timestamp
2017-01-02 2 0
2017-01-05 0 1
2017-01-08 1 2
2017-01-11 1 0

和一行解决方案:

df1 = (df.query("address in @my_list")
.groupby([pd.Grouper(freq='3D', key='timestamp'), 'type'])['address']
.nunique()
.unstack(fill_value=0))
print (df1)
type A B
timestamp
2017-01-02 2 0
2017-01-05 0 1
2017-01-08 1 2
2017-01-11 1 0

关于python - 按时间分组,然后仅当这些条目存在于列表中时才计算唯一条目 [Panda],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47249790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com