我是python的新手,在这里我有一个问题,我不知道如何解决,请帮忙。
这是事情:我有一个数据框,我想提取一个满足两种不同条件的列。
列如下:
state gender year name births
13299 AK F 2013 Emma 57
13300 AK F 2013 Sophia 50
13301 AK F 2013 Abigail 39
13302 AK F 2013 Isabella 38
13303 AK F 2013 Olivia 36
13304 AK F 2013 Charlotte 34
13305 AK F 2013 Harper 34
13306 AK F 2013 Emily 33
13307 AK F 2013 Ava 31
13308 AK F 2013 Avery 30
5742631 WY M 2013 Emmett 5
5742632 WY M 2013 Jesse 5
5742633 WY M 2013 Jonah 5
5742634 WY M 2013 Jude 5
5742635 WY M 2013 Kaden 5
5742636 WY M 2013 Kaleb 5
5742637 WY M 2013 Kasen 5
5742638 WY M 2013 Kellan 5
此数据框中有90K行,我想返回'name'的值,其中'gender'列尽可能均匀地分布到'M'和'F'。
或换句话说:我想在'births'列包含相同数量的'M'和'F'的条件下返回'name'的值。
对不起我是Python的新手,我已经坚持了很长一段时间。 我试图将数据框分成两个不同的数据框,并按照这种方式进行,但我发现它有点不可能。
任何建议都将不胜感激。
答案 0 :(得分:1)
pandas中的数据透视表在这里工作正常:
pvt = pd.pivot_table(df,values='births',columns='gender',index='name',aggfunc='sum')
pvt[pvt['M'] == pvt['F']]
这将返回一个数据框,其名称为索引,M,F为列。男女皆宜的名字不太可能完全相同,所以你可以做一个像
这样的多元传统pvt[(pvt['M'] + 10 > pvt['F']) & (pvt['M'] - 10 < pvt['F'])]
答案 1 :(得分:0)
我已定义df1
进一步处理。我已将索引设置为['name', 'gender']
,然后将unstack
设置为性别&#39;进入专栏。 .births
专注于分娩。然后我将min除以最大值以避免除以零。
df1 = df.set_index(['name', 'gender'], append=True).unstack().births.fillna(0)
df1.min(1).astype(float).div(df1.max(1)).sort_values(ascending=False)
这应该为您提供一个排序的数据框,其名称的最接近比率为1.