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

时间:2018-03-01 19:29:56

标签: python pandas

我想计算当前行与前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。 任何反馈都将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

这是我对它的快速拍摄。

答案 1 :(得分: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