2024-05-29 01:53:57 发布
网友
我有一个包含许多类别的数据帧,但我只尝试使用两个。我设法得到了我想要的结果,但在我的项目中没有被接受(“有更好的方法可以做到”)。使用两列-性别(M/F)和显示(1/0),我试图得到4个变量:male1,male0,female1,female0,用它们创建条形图。在
我被告知要使用pd系列地图函数,但我到处找了找,找不到一个很好的例子,也不知道如何从中得到4个变量。在
谢谢你的帮助。在
这看起来像是crosstab(它是一个内置函数:D)
crosstab
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)
pd.Series.map是不必要的。您可以在这里使用GroupBy并输出字典:
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显示。在
d[('F', 0)]
但是如果你真的必须使用map,你可以使用^{}版本:
map
你可以用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。在
apply
使用groupby
groupby
counts = df.groupby(['Gender', 'Showed']).size().reset_index(name='Count')
这看起来像是
crosstab
(它是一个内置函数:D)输出:
^{pr2}$pd.Series.map
是不必要的。您可以在这里使用GroupBy
并输出字典:一般来说,您应该避免创建可变数量的变量。字典允许您有效地提取值,例如通过
d[('F', 0)]
表示女性性别和0显示。在但是如果你真的必须使用} 版本:
^{pr2}$map
,你可以使用^{你可以用4条简单的线来完成。在
使用
^{pr2}$apply
,因为需要两个系列而不是一个系列,所以需要使用apply
。在使用
groupby
相关问题 更多 >
编程相关推荐