簡體   English   中英

Pandas:如何按每行的非 NaN 數量進行 GROUPBY?

[英]Pandas: how to GROUPBY by number of not NaNs for each row?

我有一個檢查所有適用問題的結果:

A   |  B  | C ...
1   | NaN | 1
NaN |  1  | NaN

其中NaN表示響應者沒有選擇該選項,如果他們選擇了該選項,則為1

我想按每行中非 NaN 的數量進行分組。 具體來說,這是我想要做的那種輸出可視化: 分組分布

我嘗試使用count()

df.count(axis=1).reset_index()

我得到了每個用戶的選定框數,但我不知道下一步是什么。

如果數據框是這樣的,我又包含了 1 行,以便我們得到 4+ 的值:

import pandas as pd
import numpy as np
from matplotlib.ticker import FuncFormatter

df = pd.DataFrame({'A':[1,np.nan,1,np.nan],
                   'B':[np.nan,1,np.nan,np.nan],
                   'C':[np.nan,1,1,np.nan],
                  'D':[np.nan,np.nan,1,np.nan]})

df.isna().sum(axis=1)會給你每行df.isna().sum(axis=1)數量。 但是你想成為這些值,你可以使用pd.cut

labels = pd.cut(df.isna().sum(axis=1),[-np.inf,1,3,+np.inf],labels=['0-1','2-3','4+'])
labels

0    2-3
1    2-3
2    0-1
3     4+

只需繪制這個:

ax = (labels.value_counts(sort=False) / len(labels)).plot.bar()
ax.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y)))

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM