在所有列上聚合

2024-04-27 03:47:56 发布

您现在位置:Python中文网/ 问答频道 /正文

Python 3和0.23

我有一个有2000列的数据框,需要根据每列的汇总统计数据来消除一些变量。你知道吗

试验数据:

data = pd.DataFrame({
    'a': np.random.normal(0, 2, 10), \
    'b': np.random.normal(0, 2, 10), \
    'c': np.random.normal(0, 2, 10) \
    })

作品:

data.aggregate(['min','max', 'nunique']).transpose()

行,但如何命名lambda列?你知道吗

data.aggregate(['min','max', 'nunique', (lambda x: np.unique(x).size / x.size)]).transpose()

显然,你应该能够给聚合函数一个dict,但我不能让它工作,除了命名所有要计算统计信息的列,即2000列。你知道吗

我不希望生成的数据帧的格式为每min、max、nunqiue的一列,以及原始数据帧中每列的一行


Tags: 数据lambdadatasizenprandommin命名
1条回答
网友
1楼 · 发布于 2024-04-27 03:47:56

您可以在聚合之后rename<lambda>,但是如果您有多个lambda函数,那么它们都具有相同的名称,这是一个问题。相反,只需使用所需的名称定义函数,然后在agg中调用它们。你知道吗

import numpy as np

def named_f1(x):
    return np.unique(x).size / x.size

data.aggregate(['min','max', 'nunique', named_f1]).T

输出:

        min       max  nunique  named_f1
a -4.152149  4.095229     10.0       1.0
b -3.436940  3.266958     10.0       1.0
c -1.703651  3.198662     10.0       1.0

相关问题 更多 >