Pandas系列地图

2024-05-29 01:53:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含许多类别的数据帧,但我只尝试使用两个。我设法得到了我想要的结果,但在我的项目中没有被接受(“有更好的方法可以做到”)。使用两列-性别(M/F)和显示(1/0),我试图得到4个变量:male1,male0,female1,female0,用它们创建条形图。在

我被告知要使用pd系列地图函数,但我到处找了找,找不到一个很好的例子,也不知道如何从中得到4个变量。在

谢谢你的帮助。在


Tags: 数据项目方法函数类别例子pd条形图
3条回答

这看起来像是crosstab(它是一个内置函数:D)

import pandas as pd
df = pd.DataFrame([['M', 0], ['M', 1], ['M', 1], ['F', 0], ['F', 0], ['F', 1]],
                  columns=['Gender', 'Showed'])

pd.crosstab(df.Gender, df.Showed)

输出:

^{pr2}$

pd.Series.map是不必要的。您可以在这里使用GroupBy并输出字典:

df = pd.DataFrame([['M', 0], ['M', 1], ['M', 1], ['F', 0], ['F', 0], ['F', 1]],
                  columns=['Gender', 'Showed'])

d = df.groupby(['Gender', 'Showed']).size().to_dict()

# {('F', 0): 2, ('F', 1): 1, ('M', 0): 1, ('M', 1): 2}

一般来说,您应该避免创建可变数量的变量。字典允许您有效地提取值,例如通过d[('F', 0)]表示女性性别和0显示。在


但是如果你真的必须使用map,你可以使用^{}版本:

^{pr2}$

你可以用4条简单的线来完成。在

male0 = ((df['Gender'] == 'M') & (df['Showed'] == 0)).sum()
female0 = ((df['Gender'] == 'F') & (df['Showed'] == 0)).sum()
male1 = ((df['Gender'] == 'M') & (df['Showed'] == 1)).sum()
female1 = ((df['Gender'] == 'F') & (df['Showed'] == 1)).sum()

使用apply,因为需要两个系列而不是一个系列,所以需要使用apply。在

^{pr2}$

使用groupby

counts = df.groupby(['Gender', 'Showed']).size().reset_index(name='Count')   

相关问题 更多 >

    热门问题