簡體   English   中英

Pandas DataFrame 中每個組的 State 中的計數變化

[英]Count Change in State For Each Group in Pandas DataFrame

我有包含產品的 Pandas 數據框,它是 state 以及其他信息。 可以按如下方式創建示例數據框

data = {'Product':['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C'],
        'Date' : ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04','2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06', '2020-01-01', '2020-01-02'],
        'Price':[10, 20, 30, 40, 15, 25, 35, 45, 55, 65, 101, 102],
         'state':[1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1]   }
test = pd.DataFrame(data)

我想計算產品 state 從 0 變為 1 的次數。我使用以下代碼檢查產品 state 是否從 0 變為 1 並將其命名為 change

test['change'] = np.where(test.state < test.state.shift(-1), 1, 0)

問題是上面的代碼沒有考慮產品,因此我需要按產品分組,然后檢查 state 中的更改。

Output:

+---------+----------+-------+-------+--------+
| Product |   Date   | Price | state | change |
+---------+----------+-------+-------+--------+
| A       | 1/1/2020 |    10 |     1 |      0 |
| A       | 1/2/2020 |    20 |     0 |      1 |
| A       | 1/3/2020 |    30 |     1 |      0 |
| A       | 1/4/2020 |    40 |     0 |      1 |
| B       | 1/1/2020 |    15 |     1 |      0 |
| B       | 1/2/2020 |    25 |     0 |      0 |
| B       | 1/3/2020 |    35 |     0 |      1 |
| B       | 1/4/2020 |    45 |     1 |      0 |
| B       | 1/5/2020 |    55 |     0 |      1 |
| B       | 1/6/2020 |    65 |     1 |      0 |
| C       | 1/1/2020 |   101 |     0 |      1 |
| C       | 1/2/2020 |   102 |     1 |      0 |
+---------+----------+-------+-------+--------+

從上面的 output 中可以看出,產品 A 在第 4 天的change為 1,因為在下一個日期state為 1,但這是針對不同的產品。

所需的 Output:

+---------+----------+-------+-------+--------+
| Product |   Date   | Price | state | change |
+---------+----------+-------+-------+--------+
| A       | 1/1/2020 |    10 |     1 |      0 |
| A       | 1/2/2020 |    20 |     0 |      1 |
| A       | 1/3/2020 |    30 |     1 |      0 |
| A       | 1/4/2020 |    40 |     0 |      0 |
| B       | 1/1/2020 |    15 |     1 |      0 |
| B       | 1/2/2020 |    25 |     0 |      0 |
| B       | 1/3/2020 |    35 |     0 |      1 |
| B       | 1/4/2020 |    45 |     1 |      0 |
| B       | 1/5/2020 |    55 |     0 |      1 |
| B       | 1/6/2020 |    65 |     1 |      0 |
| C       | 1/1/2020 |   101 |     0 |      1 |
| C       | 1/2/2020 |   102 |     1 |      0 |
+---------+----------+-------+-------+--------+



+---------+------------+
| Product |count_change|
+---------+------------+
| A       |          1 |
| B       |          2 |
| C       |          1 |
+---------+------------+

如何調整代碼以便在基於產品分組后計算change ,並且我可以獲得 state 從 0 變為 1 的次數的產品明智計數。

嘗試分組:

g = test.groupby('Product')
test['change'] = (g['state'].diff(-1)<0).astype(int)
g['change'].sum()

暫無
暫無

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

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