使用pandas + python(带条件)计算滚动窗口中的不同字符串

问题描述 投票:1回答:2

我想计算当前行和前5行(滑动窗口)之间存在的不同端口号的数量,以及当出现相同地址时的数量。例如,

如果输入是(csv文件):

ID      PORT     ADDRESS
1        21       ad3 
2        22       ad1  
3        23       ad2
4        25       ad2 
5        25       ad1
6        22       ad1 
7        22       ad1
8        21       ad4

输出应该是:

ID      PORT     ADDRESS      COUNT_DISC_PORT
1        21       ad3        -
2        22       ad1        -
3        23       ad2        - 
4        25       ad2        - 
5        25       ad1        - 
6        22       ad1        2 
7        23       ad1        3
8        21       ad4        1 

我已经阅读了关于pandas中滚动功能的文档,我尝试将group by和rolling结合起来但没有成功。

我使用的是Python 3.7和pandas包0.22。对于任何反馈,我们都表示感谢。

python pandas
2个回答
0
投票

for index, row in df.iterrows(): small_df = df[index - 5:index] df['uniques'][index] = len(small_df.unique())

这是我的快速拍摄。


0
投票

好的,好像您的数据输入与我们的节目不匹配

df.groupby('ADDRESS').PORT.apply(lambda x : pd.Series(x).rolling(5,min_periods=1).apply(lambda y: len(set(y))))
Out[844]: 
0    1.0
1    1.0
2    1.0
3    2.0
4    2.0
5    2.0
Name: PORT, dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.