使用复合键查找条形图
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'])
我有一个 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'])