簡體   English   中英

Pandas - 在數據框中添加平均值、最大值、最小值作為行

[英]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.

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