簡體   English   中英

通過對現有列進行分組和執行操作,在 pandas df 中創建新列

[英]Create new columns in pandas df by grouping and performing operations on an existing column

我有一個看起來像這樣的數據框(Minimal Reproducible Example)

thermometers = ['T-10000_0001', 'T-10000_0002','T-10000_0003', 'T-10000_0004', 
                'T-10001_0001', 'T-10001_0002', 'T-10001_0003', 'T-10001_0004', 
                'T-10002_0001', 'T-10002_0003', 'T-10002_0003', 'T-10002_0004']

temperatures = [15.1, 14.9, 12.7, 10.8,
               19.8, 18.3, 17.7, 18.1,
               20.0, 16.4, 17.6, 19.3]

df_set = {'thermometers': thermometers,
         'Temperatures': temperatures}

df = pd.DataFrame(df_set)
指數 溫度計 溫度
0 T-10000_0001 14.9
1 T-10000_0002 12.7
2 T-10000_0003 12.7
3 T-10000_0004 10.8
4 T-10001_0001 19.8
5 T-10001_0002 18.3
6 T-10001_0003 17.7
7 T-10001_0004 18.1
8 T-10002_0001 20.0
9 T-10002_0002 16.4
10 T-10002_0003 17.6
11 T-10002_0004 19.3

我正在嘗試對溫度計進行分組(即'T-10000'、'T-10001'、'T-10002'),並創建具有每個溫度計讀數的最小值、最大值和平均值的新列。 所以我的最終數據框看起來像這樣

指數 溫度計 min_temp 平均溫度 最大溫度
0 T-10000 10.8 12.8 14.9
1 T-10001 17.7 18.5 19.8
2 T-10002 16.4 18.3 20.0

我嘗試創建一個我認為需要正則表達式的單獨函數,但我無法弄清楚如何去做。 任何幫助都感激不盡。

通過使用分隔符_拆分來使用groupby 然后,只需聚合您需要的任何功能。

>>> df.groupby(df['thermometers']\
               .str.split('_').  \
               .str.get(0)).agg(['min', 'mean', 'max'])

                      min    mean   max
thermometers                           
T-10000              10.8  13.375  15.1
T-10001              17.7  18.475  19.8
T-10002              16.4  18.325  20.0

另一種使用str.extract的方法來避免調用str.get

(df['Temperatures']
 .groupby(df['thermometers'].str.extract('(^[^_]+)', expand=False))
 .agg(['min', 'mean'])
 )

輸出:

               min    mean
thermometers              
T-10000       10.8  13.375
T-10001       17.7  18.475
T-10002       16.4  18.325

暫無
暫無

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

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