如何用正好两个唯一值绘制数据框列?

时间:2019-06-06 07:33:57

标签: python pandas

我正在尝试遍历Pandas数据框,并仅对恰好包含两个唯一值的列生成条形图。我设想最终的条形图将在X轴和Y轴上包含两个唯一值,以显示行数。

我已经能够在数据框(df_clean)上生成一个Series,它向我显示每列的唯一值数量:

    col_values = df_clean.apply(lambda x: len(x.unique()))

但是我完全不知道该怎么做:

  • 在我的df_clean中循环以仅绘制具有两个唯一值的列
  • 如何在一个图中生成多个图(我认为matplotlib子图会有所帮助?)

在同一代码中,我能够成功遍历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

1 个答案:

答案 0 :(得分:2)

尝试使用Series.nuniqueSeries.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')

enter image description here