![](/img/trans.png)
[英]How to apply multiple custom functions on multiple columns in grouped DataFrame in pandas?
[英]Pandas: How do you group data together by date and apply multiple functions to the grouped data?
在我的代碼中,我有一個pandas數據框,其中有一天的列和稱為value的列。 我想按天對數據框進行分組,並找到當天的最小值和最大值,對最小值和最大值進行平均,然后從數據框的值列中減去該平均值。
我最能做的是:
temp_max = var.groupby(['day']).max()
temp_min = var.groupby(['day']).min()
answer = var.groupby(['day'])['value'].apply(lambda x : x - (temp_max['value'] - temp_min['value']) / 2 )
輸入:
Unnamed: 0 hrs vt rt value
0 119899 1 2017-03-01 07:00:00 2017-03-01 06:00:00 67.910011
1 119900 2 2017-03-01 08:00:00 2017-03-01 06:00:00 52.970033
2 119901 3 2017-03-01 09:00:00 2017-03-01 06:00:00 49.010011
3 119902 4 2017-03-01 10:00:00 2017-03-01 06:00:00 47.030000
4 119903 5 2017-03-01 11:00:00 2017-03-01 06:00:00 45.949989
5 119904 6 2017-03-01 12:00:00 2017-03-01 06:00:00 45.949989
輸出:
1 0 NaN
1 41.540022
2 31.549989
3 29.570005
4 36.949989
5 38.030000
6 40.010011
7 33.980000
8 47.030000
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
2 1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
17 NaN
18 NaN
19 NaN
20 NaN
21 NaN
...
6 4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
53 NaN
54 NaN
55 NaN
56 NaN
7 1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
57 NaN
58 NaN
59 NaN
60 NaN
8 1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
61 NaN
該值似乎是正確的,但我希望保留原始數據框,並僅將這些值更新到位。 我應該采用其他方法嗎? 提前謝謝!
這樣的事情怎么樣?
new_frame = pd.DataFrame(columns=var.columns)
for day,frame in var.groupby('day'):
frame.loc[:,'value'] = frame['value'].apply(lambda x: x - (frame.value.max() + frame.value.min())/2)
new_frame = new_frame.append(frame)
您可以使用列表理解和groupby在一行中完成此操作,但是看起來有點難看
var.loc[:,'value'] = pd.concat([frm.value.apply(lambda x:x-(frm.value.min() + frm.value.max())/2) for d,frm in var.groupby('day')])
我相信,即使不是特別易讀,它也可以完成您想要的工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.