我正在尝试遍历Pandas数据框,并仅对恰好包含两个唯一值的列生成条形图。我设想最终的条形图将在X轴和Y轴上包含两个唯一值,以显示行数。
我已经能够在数据框(df_clean)上生成一个Series,它向我显示每列的唯一值数量:
col_values = df_clean.apply(lambda x: len(x.unique()))
但是我完全不知道该怎么做:
在同一代码中,我能够成功遍历df_clean并成功绘制所有int和float类型的列。我正在努力解决上述问题的工作代码。
i = 1
c_num_cols = len(df_clean.select_dtypes(["int64","float64"]).columns)
for column in df_clean.select_dtypes(["int64","float64"]).columns:
plt.subplot(c_num_cols,(c_num_cols % 2) + 1,i)
plt.subplots_adjust(hspace=0.5)
df_clean[column].plot(kind = 'hist', figsize = [15,c_num_cols * 4], title = column)
i += 1
答案 0 :(得分:2)
尝试使用Series.nunique
和Series.value_counts
:
binary_cols = df.nunique()[lambda x: x == 2].index
for i, col in enumerate(binary_cols):
plt.subplot(len(binary_cols), (len(binary_cols) % 2) + 1, i+1)
plt.subplots_adjust(hspace=0.5)
df[col].value_counts().plot(kind='bar')
# Setup
df = pd.DataFrame({'col1': list('aaaaaaabbbbbbbb'),
'col2': list('aaabbbcccdddeee'),
'col3': [1] * 9 + [3] * 6})
binary_cols = df.nunique()[lambda x: x == 2].index
for i, col in enumerate(binary_cols):
plt.subplot(len(binary_cols), (len(binary_cols) % 2) + 1, i+1)
plt.subplots_adjust(hspace=0.5)
df[col].value_counts().plot(kind='bar')