【问题标题】:How to plot data frame columns with exactly two unique values?如何绘制具有两个唯一值的数据框列?
【发布时间】:2019-06-06 15:57:27
【问题描述】:

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

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

    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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    【讨论】:

    • 是的,这正是我所需要的。非常感谢!
    • @MWinch 很高兴它可以帮助好友
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2017-09-03
    • 2018-03-10
    相关资源
    最近更新 更多