在pandas数据框中计算元素数量

3
任何关于如何优雅地对我数据框中每一列进行以下计数的建议:
  • 该列中数字元素(任何值)的数量
  • 该列中非零数字元素的数量
这里有一些生成类似数据框的代码(但要小得多):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#from matplotlib import style
import seaborn as sns

df = pd.DataFrame(data=np.random.random_integers(low=0,high=10,size=(50,1)),
                  columns=['all']
                  )

# set up the grouping
g = df.groupby(pd.cut(df['all'],[-1,2,4,6,8,10]))
for name, data in g.groups.items():
    df[name] = df.loc[data]['all']

这将生成一个类似下面这样的数据框:

dataframe


你期望输出超出了吗? - BENY
2个回答

1
你可以不使用apply来完成这个操作:
In [11]: df.notnull().sum()
Out[11]:
all        50
(-1, 2]    12
(2, 4]     12
(4, 6]      7
(6, 8]     10
(8, 10]     9
dtype: int64

In [12]: (df.notnull() & (df != 0)).sum()
Out[12]:
all        46
(-1, 2]     8
(2, 4]     12
(4, 6]      7
(6, 8]     10
(8, 10]     9
dtype: int64

注意:计算 True 值的数量与取它们的总和相同。

0

计算列中数值(任何值)的元素数量

df.apply(lambda x : x.notnull().sum())
Out[262]: 
all        50
(8, 10]     9
(-1, 2]    12
(4, 6]      9
(2, 4]     12
(6, 8]      8
dtype: int64

计算该列中为数值且不为零的元素数量

df.mask(df==0).apply(lambda x : x.notnull().sum())
Out[263]: 
all        48
(8, 10]     9
(-1, 2]    10
(4, 6]      9
(2, 4]     12
(6, 8]      8
dtype: int64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接