簡體   English   中英

使用pandas計算滾動窗口中的不同字符串

[英]Count distinct strings in rolling window using pandas

如何計算pandas數據框滾動窗口中唯一字符串的數量?

a = pd.DataFrame(['a','b','a','a','b','c','d','e','e','e','e'])
a.rolling(3).apply(lambda x: len(np.unique(x)))

輸出,與原始數據幀相同:

    0
0   a
1   b
2   a
3   a
4   b
5   c
6   d
7   e
8   e
9   e
10  e

預期:

    0
0   1
1   2
2   2
3   2
4   2
5   3
6   3
7   3
8   2
9   1
10  1

我認為你需要先將值轉換為數字 - 通過factorize或按rank 此外, min_periods參數對於在列的開頭避免NaN是必需的:

a[0] = pd.factorize(a[0])[0]
print (a)
    0
0   0
1   1
2   0
3   0
4   1
5   2
6   3
7   4
8   4
9   4
10  4

b = a.rolling(3, min_periods=1).apply(lambda x: len(np.unique(x))).astype(int)
print (b)
    0
0   1
1   2
2   2
3   2
4   2
5   3
6   3
7   3
8   2
9   1
10  1

要么:

a[0] = a[0].rank(method='dense')
      0
0   1.0
1   2.0
2   1.0
3   1.0
4   2.0
5   3.0
6   4.0
7   5.0
8   5.0
9   5.0
10  5.0

b = a.rolling(3, min_periods=1).apply(lambda x: len(np.unique(x))).astype(int)
print (b)
    0
0   1
1   2
2   2
3   2
4   2
5   3
6   3
7   3
8   2
9   1
10  1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM