我有一個df如下的資料框:
import pandas as pd
data = {'A': ['XYZ', 'XYZ', 'XYZ', 'XYZ', 'PQR', 'XYZ', 'XYZ', 'ABC', 'XYZ', 'ABC'], 'B': ['2022-02-16 14:00:31', '2022-02-16 16:11:26', '2022-02-16 17:31:26',
'2022-02-16 22:47:46', '2022-02-17 07:11:11', '2022-02-17 10:43:36',
'2022-02-17 15:05:11', '2022-02-17 15:07:25', '2022-02-17 15:08:35',
'2022-02-17 15:09:46'], 'C': [1,0,0,0,1,0,0,1,0,0]}
df = pd.DataFrame(data)
df['B'] = pd.to_datetime(df['B'])
df
| A | B | C |
------- ---------------------- ------------
| XYZ | 2022-02-16 14:00:31 | 1 |
| XYZ | 2022-02-16 16:11:26 | 0 |
| XYZ | 2022-02-16 17:31:26 | 0 |
| XYZ | 2022-02-16 22:47:46 | 0 |
| PQR | 2022-02-17 07:11:11 | 1 |
| XYZ | 2022-02-17 10:43:36 | 0 |
| XYZ | 2022-02-17 15:05:11 | 0 |
| ABC | 2022-02-17 15:07:25 | 1 |
| XYZ | 2022-02-17 15:08:35 | 0 |
| ABC | 2022-02-17 15:09:46 | 0 |
------- ---------------------- ------------
我想要實作的是,我想計算 , 的每次出現的重復次數,以便XYZ得到如下所示的輸出。PQRABC
Expected Output :
| A | B | C | Count |
------- ---------------------- ------------ ----------
| XYZ | 2022-02-16 14:00:31 | 1 | 7 |
| XYZ | 2022-02-16 16:11:26 | 0 | |
| XYZ | 2022-02-16 17:31:26 | 0 | |
| XYZ | 2022-02-16 22:47:46 | 0 | |
| PQR | 2022-02-17 07:11:11 | 1 | 1 |
| XYZ | 2022-02-17 10:43:36 | 0 | |
| XYZ | 2022-02-17 15:05:11 | 0 | |
| ABC | 2022-02-17 15:07:25 | 1 | 2 |
| XYZ | 2022-02-17 15:08:35 | 0 | |
| ABC | 2022-02-17 15:09:45 | 0 | |
------- ---------------------- ------------ ----------
目前,我正在嘗試通過使用下面的代碼來實作相同的目標,但我無法獲得預期/期望的結果。
one_index = df[df['C'] == 1].index
zero_index = df[df['C'] == 0].index
df.loc[0, 'Count'] = len(df)
| A | B | C | Count |
------- ---------------------- ------------ ----------
| XYZ | 2022-02-16 14:00:31 | 1 | 10 |
| XYZ | 2022-02-16 16:11:26 | 0 | |
| XYZ | 2022-02-16 17:31:26 | 0 | |
| XYZ | 2022-02-16 22:47:46 | 0 | |
| PQR | 2022-02-17 07:11:11 | 1 | |
| XYZ | 2022-02-17 10:43:36 | 0 | |
| XYZ | 2022-02-17 15:05:11 | 0 | |
| ABC | 2022-02-17 15:07:25 | 1 | |
| XYZ | 2022-02-17 15:08:35 | 0 | |
| ABC | 2022-02-17 15:09:45 | 0 | |
------- ---------------------- ------------ ----------
那么,如何獲得A上述列的每個值的重復計數?
編輯(可選):
df在分配計數值之后,我還希望將 ID 分配給組。因此,分配 ID 后,我的最終資料框應如下所示:
| A | B | C | Count | ID |
------- ---------------------- ------------ ---------- -------
| XYZ | 2022-02-16 14:00:31 | 1 | 7 | ABC_1 |
| XYZ | 2022-02-16 16:11:26 | 0 | | |
| XYZ | 2022-02-16 17:31:26 | 0 | | |
| XYZ | 2022-02-16 22:47:46 | 0 | | |
| PQR | 2022-02-17 07:11:11 | 1 | 1 | ABC_2 |
| XYZ | 2022-02-17 10:43:36 | 0 | | |
| XYZ | 2022-02-17 15:05:11 | 0 | | |
| ABC | 2022-02-17 15:07:25 | 1 | 2 | ABC_3 |
| XYZ | 2022-02-17 15:08:35 | 0 | | |
| ABC | 2022-02-17 15:09:45 | 0 | | |
------- ---------------------- ------------ ---------- -------
uj5u.com熱心網友回復:
GroupBy.transform與設定空字串一起使用by中的非1值:CSeries.where
df['B'] = pd.to_datetime(df['B'])
m = df.C.eq(1)
df['Count'] = df.groupby('A')['C'].transform('size').where(m, '')
df.loc[m, 'ID'] = 'ABC_' pd.RangeIndex(1, m.sum() 1).astype(str)
df['ID'] = df['ID'].fillna('')
print (df)
A B C Count ID
0 XYZ 2022-02-16 14:00:31 1 7 ABC_1
1 XYZ 2022-02-16 16:11:26 0
2 XYZ 2022-02-16 17:31:26 0
3 XYZ 2022-02-16 22:47:46 0
4 PQR 2022-02-17 07:11:11 1 1 ABC_2
5 XYZ 2022-02-17 10:43:36 0
6 XYZ 2022-02-17 15:05:11 0
7 ABC 2022-02-17 15:07:25 1 2 ABC_3
8 XYZ 2022-02-17 15:08:35 0
9 ABC 2022-02-17 15:09:46 0
或者:
df['B'] = pd.to_datetime(df['B'])
m = df.C.eq(1)
df['Count'] = df.groupby('A')['C'].transform('size').where(m, '')
df['ID'] = ('ABC_' df['C'].cumsum().astype(str)).where(m, '')
print (df)
A B C Count ID
0 XYZ 2022-02-16 14:00:31 1 7 ABC_1
1 XYZ 2022-02-16 16:11:26 0
2 XYZ 2022-02-16 17:31:26 0
3 XYZ 2022-02-16 22:47:46 0
4 PQR 2022-02-17 07:11:11 1 1 ABC_2
5 XYZ 2022-02-17 10:43:36 0
6 XYZ 2022-02-17 15:05:11 0
7 ABC 2022-02-17 15:07:25 1 2 ABC_3
8 XYZ 2022-02-17 15:08:35 0
9 ABC 2022-02-17 15:09:46 0
uj5u.com熱心網友回復:
與布爾索引一起使用value_countsand :map
df['Count'] = df.loc[df['C'].eq(1), 'A'].map(df['A'].value_counts())
輸出:
A B C Count
0 XYZ 2022-02-16 14:00:31 1 7.0
1 XYZ 2022-02-16 16:11:26 0 NaN
2 XYZ 2022-02-16 17:31:26 0 NaN
3 XYZ 2022-02-16 22:47:46 0 NaN
4 PQR 2022-02-17 07:11:11 1 1.0
5 XYZ 2022-02-17 10:43:36 0 NaN
6 XYZ 2022-02-17 15:05:11 0 NaN
7 ABC 2022-02-17 15:07:25 1 2.0
8 XYZ 2022-02-17 15:08:35 0 NaN
9 ABC 2022-02-17 15:09:46 0 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519488.html
