我看到 pandas 库有一个Describe by函数可以返回一些有用的统计信息。但是,有没有办法向输出添加额外的行,例如标准偏差 (.std) 和中值绝对偏差 (.mad) 或唯一值的计数?
我明白了,df.describe()但我无法找到如何添加这些额外的摘要内容
默认describe看起来像这样:
np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(100, 5), columns=list('ABCDE'))
df.describe()
A B C D E
count 100.000000 100.000000 100.000000 100.000000 100.000000
mean 0.495871 0.472939 0.455570 0.503899 0.451341
std 0.303589 0.291968 0.294984 0.269936 0.284666
min 0.006453 0.001559 0.001068 0.015311 0.009526
25% 0.239379 0.219141 0.196251 0.294371 0.202956
50% 0.529596 0.456548 0.376558 0.532002 0.432936
75% 0.759452 0.739666 0.665563 0.730702 0.686793
max 0.999799 0.994510 0.997271 0.981551 0.979221
Run Code Online (Sandbox Code Playgroud)
更新熊猫 > 0.21.0
我会describe像下面这样制作我自己的。如何添加更多内容应该是显而易见的。
def describe(df, stats):
d = df.describe()
return d.append(df.reindex(d.columns, axis = 1).agg(stats))
describe(df, ['skew', 'mad', 'kurt'])
A B C D E
count 100.000000 100.000000 100.000000 100.000000 100.000000
mean 0.495871 0.472939 0.455570 0.503899 0.451341
std 0.303589 0.291968 0.294984 0.269936 0.284666
min 0.006453 0.001559 0.001068 0.015311 0.009526
25% 0.239379 0.219141 0.196251 0.294371 0.202956
50% 0.529596 0.456548 0.376558 0.532002 0.432936
75% 0.759452 0.739666 0.665563 0.730702 0.686793
max 0.999799 0.994510 0.997271 0.981551 0.979221
skew -0.014942 0.048054 0.247244 -0.125151 0.066156
mad 0.267730 0.249968 0.254351 0.228558 0.242874
kurt -1.323469 -1.223123 -1.095713 -1.083420 -1.148642
Run Code Online (Sandbox Code Playgroud)
更新熊猫 0.20
我会describe像下面这样制作我自己的。如何添加更多内容应该是显而易见的。
def describe(df, stats):
d = df.describe()
return d.append(df.reindex_axis(d.columns, 1).agg(stats))
describe(df, ['skew', 'mad', 'kurt'])
A B C D E
count 100.000000 100.000000 100.000000 100.000000 100.000000
mean 0.495871 0.472939 0.455570 0.503899 0.451341
std 0.303589 0.291968 0.294984 0.269936 0.284666
min 0.006453 0.001559 0.001068 0.015311 0.009526
25% 0.239379 0.219141 0.196251 0.294371 0.202956
50% 0.529596 0.456548 0.376558 0.532002 0.432936
75% 0.759452 0.739666 0.665563 0.730702 0.686793
max 0.999799 0.994510 0.997271 0.981551 0.979221
skew -0.014942 0.048054 0.247244 -0.125151 0.066156
mad 0.267730 0.249968 0.254351 0.228558 0.242874
kurt -1.323469 -1.223123 -1.095713 -1.083420 -1.148642
Run Code Online (Sandbox Code Playgroud)
旧答案
def describe(df):
return pd.concat([df.describe().T,
df.mad().rename('mad'),
df.skew().rename('skew'),
df.kurt().rename('kurt'),
], axis=1).T
describe(df)
A B C D E
count 100.000000 100.000000 100.000000 100.000000 100.000000
mean 0.495871 0.472939 0.455570 0.503899 0.451341
std 0.303589 0.291968 0.294984 0.269936 0.284666
min 0.006453 0.001559 0.001068 0.015311 0.009526
25% 0.239379 0.219141 0.196251 0.294371 0.202956
50% 0.529596 0.456548 0.376558 0.532002 0.432936
75% 0.759452 0.739666 0.665563 0.730702 0.686793
max 0.999799 0.994510 0.997271 0.981551 0.979221
mad 0.267730 0.249968 0.254351 0.228558 0.242874
skew -0.014942 0.048054 0.247244 -0.125151 0.066156
kurt -1.323469 -1.223123 -1.095713 -1.083420 -1.148642
Run Code Online (Sandbox Code Playgroud)
piRSquared 的答案对我来说最有意义,但我收到了关于 Python 3.5 中 reindex_axis 的弃用警告。这对我有用:
stats = data.describe()
stats.loc['IQR'] = stats.loc['75%'] - stats.loc['25%'] # appending interquartile range instead of recalculating it
stats = stats.append(data.reindex(stats.columns, axis=1).agg(['skew', 'mad', 'kurt']))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5784 次 |
| 最近记录: |