第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Pandas:合并多個(gè)describe()統(tǒng)計(jì)數(shù)據(jù)

Pandas:合并多個(gè)describe()統(tǒng)計(jì)數(shù)據(jù)

LEATH 2024-01-27 14:42:10
該pandas.DataFrame.describe函數(shù)計(jì)算 DataFrame 沿其每一列的統(tǒng)計(jì)信息:>>> s = pd.Series([1, 2, 3])>>> s.describe()count    3.0mean     2.0std      1.0min      1.025%      1.550%      2.075%      2.5max      3.0dtype: float64我有一個(gè) CSV 文件目錄,每個(gè)文件對(duì)應(yīng)一個(gè) DataFrame。我想計(jì)算每個(gè) DataFrame 的統(tǒng)計(jì)數(shù)據(jù),然后也輸出整個(gè)目錄的組合統(tǒng)計(jì)數(shù)據(jù)。我只需要count/mean/min/max。除了concat將所有 DataFrame 組合在一起并調(diào)用describe()這個(gè)巨大的 DataFrame 之外,還有什么好的方法可以做到這一點(diǎn)嗎?
查看完整描述

2 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

沒那么容易,添加了另外 2 個(gè)解決方案。差異在于平均值,因?yàn)椴淮嬖趍ean,means也count用于排除缺失值,所以我更喜歡size方法:


np.random.seed(2020)

df = pd.DataFrame(np.random.randint(10, size=(3, 3)))

dfs = [df, df * 2, df * 3, df * 5]


list_of_summaries = [x.agg(['min','max','size', 'mean','count', 'sum']) for x in dfs]

df = pd.concat(list_of_summaries, axis=1) 

df = pd.DataFrame([df.loc['min'].min(level=0),

                   df.loc['max'].max(level=0),

                   df.loc['size'].sum(level=0),

                   df.loc['sum'].sum(level=0)])

df.loc['mean'] = df.loc['sum'].div(df.loc['size'])

df = df.drop('sum')

print (df)

              0          1     2

min    0.000000   3.000000   0.0

max   35.000000  40.000000  15.0

size  12.000000  12.000000  12.0

mean  11.916667  17.416667   5.5

df1 = (pd.concat(list_of_summaries, axis=1)

         .T

         .groupby(level=0)

         .agg({'min':'min', 'max':'max', 'size':'sum', 'sum':'sum'})

         .T)

df1.loc['mean'] = df1.loc['sum'].div(df.loc['size'])

df1 = df1.drop('sum')

print (df1)

              0          1     2

min    0.000000   3.000000   0.0

max   35.000000  40.000000  15.0

size  12.000000  12.000000  12.0

mean  11.916667  17.416667   5.5

import functools

import pandas as pd


def reduce_(a, b):

    return pd.DataFrame([

        pd.concat([a.loc['min'], b.loc['min']], axis=1).min(axis=1),

        pd.concat([a.loc['max'], b.loc['max']], axis=1).max(axis=1),

        pd.concat([a.loc['count'], b.loc['count']], axis=1).sum(axis=1),

        pd.concat([a.loc['mean'], b.loc['mean']], axis=1).mean(axis=1),

    ], index=['min', 'max', 'count', 'mean'])


assert len(list_of_summaries) > 0

summary_of_summaries = functools.reduce(reduce_, list_of_summaries)


print (summary_of_summaries)

               0          1      2

min     0.000000   3.000000   0.00

max    35.000000  40.000000  15.00

count  12.000000  12.000000  12.00

mean   15.708333  22.958333   7.25


查看完整回答
反對(duì) 回復(fù) 2024-01-27
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是我目前擁有的最好的方法,不需要將所有數(shù)據(jù)合并到一個(gè)巨大的 DataFrame 中。它的可讀性或效率不是很高,但我不妨將其發(fā)布以明確我正在尋找的內(nèi)容:


import functools

import pandas as pd


def reduce_(a, b):

    return pd.DataFrame([

        pd.concat([a.loc['min'], b.loc['min']], axis=1).min(axis=1),

        pd.concat([a.loc['max'], b.loc['max']], axis=1).max(axis=1),

        pd.concat([a.loc['count'], b.loc['count']], axis=1).sum(axis=1),

        # mean is weighted so trickier

    ], index=['min', 'max', 'count'])


assert len(list_of_summaries) > 0

summary_of_summaries = functools.reduce(reduce_, list_of_summaries)

這里的困難本質(zhì)上是我需要為每一行使用不同的運(yùn)算符,你知道嗎?


查看完整回答
反對(duì) 回復(fù) 2024-01-27
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)