使用复合键查找条形图

Find bar plot using composite key

我有一个 table 如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame({'id': [a12,a12,b11,b113,c13,c13], 
                   'A': [np.nan,np.nan,3,3,np.nan,np.nan],'B':[7,7,np.nan,np.nan,np.nan,np.nan],'C':[np.nan,np.nan,np.nan,2,4,4],'D':[np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]})```

[数据框][1] [1]: https://i.stack.imgur.com/UsmCp.png

我想绘制一个使用唯一值的箱线图,所以我这样做了:

dic = df.nunique() # Will get distinct counts of each column
```dic = dic[1:].to_dict()
import matplotlib.pyplot as plt
plt.bar(dic.keys(),dic.values());

但这将是错误的,因为那些单独的 A、B、C 和 D 列的唯一值可以在其他一些行中重复。

那么,是否可以使用 id 和各个列的组合键并获得箱线图?

您可以 melt 数据框和 drop_duplicates() 然后 groupby size 从那里:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({'id': ['a12','a12','b11','b113','c13','c13'], 
                   'A': [np.nan,np.nan,3,3,np.nan,np.nan],'B':[7,7,np.nan,np.nan,np.nan,np.nan],'C':[np.nan,np.nan,np.nan,2,4,4],'D':[np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]})
df1 = (df.melt(id_vars='id')
       .drop_duplicates(subset=['id', 'value'])
       .dropna()
       .groupby('variable', as_index=False)
       .size())
plt.bar(df1['variable'], df1['size'])