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