[英]Pandas - Add mean, max, min as row in dataframe
Dataframe evntually 轉換為 Excel...嘗試在每列上方創建一個附加行,其中 avg 和 max 。
我不想硬編碼列名,因為這些會改變需要某種抽象。 我試圖創建一個最大值但失敗了。 我需要列標題上方的最大值。
試試這個,我不知道如何在數據框之上創建,但我相信最終它可能是一個很好的解決方案:
import pandas as pd
df = {
'date and time':['2022-03-01', '2022-03-02', '2022-03-03', '2022-03-04'],
'<PowerAC--->':[40, 20, 9, 12]
}
df = pd.DataFrame(df)
cols = ['<PowerAC--->']
agg = (df[cols].agg(['mean', max]))
out = pd.concat([df, agg])
print(out)
一種單線方法,它還刪除“NaN”值以使其視覺效果更好(我有點強迫症;))
df.append(df.agg({'<PowerAC--->' : ['mean', max]})).fillna('')
我會說將您的數據與其報告分開是一個好主意 - 我並沒有真正看到“列上方的附加行”的邏輯。
我會將整體數據的統計信息作為單獨的數據框生成。
import pandas as pd
import numpy as np
np.random.seed(1)
t = pd.date_range(start='2022-05-31', end='2022-06-07')
x = np.random.rand(len(t))
df = pd.DataFrame({'date': t, 'data': x})
print(df)
# The 'numeric_only=False' behaviour will become default in a future version of pandas
d_mean = df.mean(numeric_only=False)
d_max = df.max()
# We need to transpose this, as the `d_mean` and `d_max` are Series (columns), and we want them as rows
df_stats = pd.DataFrame({'mean': d_mean, 'max':d_max}).transpose()
print(df_stats)
df
輸出:
date data
0 2022-05-31 0.417022
1 2022-06-01 0.720324
2 2022-06-02 0.000114
3 2022-06-03 0.302333
4 2022-06-04 0.146756
5 2022-06-05 0.092339
6 2022-06-06 0.186260
7 2022-06-07 0.345561
df_stats
輸出:
date data
mean 2022-06-03 12:00:00 0.276339
max 2022-06-07 00:00:00 0.720324
您可以將它和數據框一起添加
pd.concat([df_stats, df])
看起來像
date data
mean 2022-06-03 12:00:00 0.276339
max 2022-06-07 00:00:00 0.720324
0 2022-05-31 00:00:00 0.417022
1 2022-06-01 00:00:00 0.720324
2 2022-06-02 00:00:00 0.000114
3 2022-06-03 00:00:00 0.302333
4 2022-06-04 00:00:00 0.146756
5 2022-06-05 00:00:00 0.092339
6 2022-06-06 00:00:00 0.18626
7 2022-06-07 00:00:00 0.345561
但除非您有充分的理由,否則我會將它們分開。
使用多索引可能有某種意義,但這有點超出我的范圍,並且可能超出了這個問題的范圍。
編輯:如果您沒有從日期列的最大值和平均值推斷出任何含義,但仍想要與該列兼容的內容(即仍然是datetime
時間但實際上為空),您可以將其替換為np.datetime64['NaT']
( NaT 類似於 NaN,但“不是時間”):
df_stats['date'] = np.datetime64['NaT']
print(pd.concat([df_stats, df]).head())
輸出:
date data
mean NaT 0.276339
max NaT 0.720324
0 2022-05-31 0.417022
1 2022-06-01 0.720324
2 2022-06-02 0.000114
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.