【问题标题】:Pandas: Short summary of dataPandas:数据的简短摘要
【发布时间】:2018-01-31 08:38:39
【问题描述】:

我目前使用以下函数来检查包含二进制数据的列中的数据分布(例如https://pastebin.com/QpWfREYB)。

print(pd.value_counts(df['binary']).apply(lambda x: x/len(data['label'])*100))

print(pd.value_counts(df['binary']).apply(lambda x: x))

输出:

A    65.466667
B    34.533333
Name: label, dtype: float64
A    7856
B    4144
Name: label, dtype: int64

有没有一种简单的方法来获得如下输出:

A   7856    (65.67%)
B   4144    (65.67%)
Sum 12000   (100.00%)

?

【问题讨论】:

标签: pandas dataframe summary


【解决方案1】:

我认为您需要两个系列的concat,添加新行并最后将() 添加到最后一列:

df = pd.read_csv('https://pastebin.com/raw/QpWfREYB', sep='\s+')
print (df.head())
  binary
0      A
1      A
2      A
3      A
4      A


a = pd.value_counts(df['binary'])
b = a.div(len(df)).mul(100).round(2)
#same as
#b = pd.value_counts(df['binary'], normalize=True).mul(100).round(2)


df = pd.concat([a,b], axis=1, keys=('x','y'))
df.loc['Sum'] = df.sum()
df['y'] = '(' + df['y'].astype(str) + '%)'
print (df)

           x         y
A     7856.0  (65.47%)
C     4144.0  (34.53%)
Sum  12000.0  (100.0%)

【讨论】:

  • 完美,可行。虽然我有点惊讶,但 pandas 中没有本机功能可以做到这一点。 .describe 在这里并没有真正的帮助..
  • 是的,我稍微修改了非双重调用函数的解决方案;)
猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2014-03-11
  • 2020-02-05
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多