繁体   English   中英

计算每个熊猫列中的非空/非零行条目

[英]Counting non-empty / non-zero row entries in each pandas column

我有一个DF,如下所示:

Name | Gender | Age | Apple | Banana | Mango | Watermelon | Kiwi
----------------------------------------------------------------
Jack | Male   | 20  | 2     | 3      | 10    |            | 
Jen  | Female | 25  | 5     |        |       | 5          | 1
Jill | Female | 22  | 5     | 3      |       | 5          | 
John | Male   | 21  | 6     |        |       |            |
Joe  | Male   | 28  | 2     | 3      |       | 5          |
Jim  | Male   | 26  | 2     | 3      |       |            |

我想查找所有列的非空单元格计数,按“性别”分组。

换句话说,所需的输出将具有:

Fruits     | Total | Male | Female |
------------------------------------
Apple      | 6     | 4    | 3      |
Banana     | 4     | 3    | 1      |
Mango      | 1     | 1    | 0      |
Watermelon | 3     | 2    | 1      |
Kiwi       | 1     | 0    | 1      |
-------------------------------------
Total      | 16     | 10   | 6

请注意:

>> print type(df.iloc[1,4])
<type 'str'>

那么,有一个空字符串,我不能用fillna()方法填充它吗?

使用drop + replace + count + T + insert

df1 = df.drop(['Name', 'Age'], 1)
df = df1.replace({'':np.nan, 0:np.nan}).groupby('Gender').count().T
df.insert(0, 'Total', df.sum(1))
df.loc['Total'] = df.sum()
print (df)
Gender      Total  Female  Male
Apple           6       2     4
Banana          4       1     3
Mango           1       0     1
Watermelon      3       2     1
Kiwi            1       1     0
Total          15       6     9

另外,如果需要更改列顺序,请添加reindex_axis

df1 = df.drop(['Name', 'Age'], 1)
df = df1.replace({'':np.nan, 0:np.nan}).groupby('Gender').count().T
df['Total'] = df.sum(1)
df.loc['Total'] = df.sum()
df = df.reindex_axis(['Total','Male','Female'], 1)
print (df)
Gender      Total  Male  Female
Apple           6     4       2
Banana          4     3       1
Mango           1     1       0
Watermelon      3     1       2
Kiwi            1     0       1
Total          15     9       6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM