matplotlib 如何才能最好地比较两个数据集的分类值频率与Pandas?

1bqhqjot  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(113)

我尝试使用Pandas和Matplotlib来比较两组数据,每组数据都有一个很长的分类变量列表,我想使用value_counts()方法来获取并存储每组数据中每个变量值的频率,这样我就可以在以后比较这两组数据在统计学上的显著差异。
到目前为止,我只有一个函数,可以在数据框中以饼图的形式显示每列的值和计数,给定一个在函数外部定义的列列表(cat_columns):

def getCat(data):
    for column in cat_columns:
        
        plt.figure()
        df[column].value_counts().plot(kind='pie', autopct='%1.1f%%')
        plt.title(f"Distribution of {column} Patients in {dataname}")
        plt.ylabel('')
        
getCat(df)

是否可以将value_counts()的返回值追加/存储到与每个原始数据集相对应的新DataFrame对象中,以便以后可以访问和操作这些值?
TIA!

0s0u357o

0s0u357o1#

我认为您可以首先将value_counts Series转换为DataFrame,然后将其与原始数据合并。
下面是一个如何做到这一点的例子。

test_df = pd.DataFrame(
    {
        'id': [1, 2, 3, 4],
        'eye_colour': ['blue', 'brown', 'brown', 'green'],
        'city': ['Paris', 'Paris', 'Lyon', 'Paris']
    }
)

cat_counts = test_df['eye_colour'].value_counts().to_frame().reset_index()
cat_counts.columns = ['eye_colour', 'eye_color_count']

display(cat_counts)

# beware that inplace changes your original dataframe while True
test_df.merge(how='left', on='eye_colour', right=cat_counts, inplace=True)

相关问题