使用pandas datafram返回满足两个条件的列

2024-05-14 16:56:39 发布

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

我对python非常陌生,这里我有一个问题我不知道如何解决,请帮助。在

事情是这样的:我有一个dataframe,我想提取一个满足两个不同条件的列。在

列如下:

     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

在这个dataframe中有大约90K行,我想返回'name'的值,其中'gender'列尽可能均匀地分布到'M'和'F'。在

或者换句话说:我想在“出生”列包含相同数量的“M”和“F”的条件下返回“name”的值。在

抱歉,我是Python新手,我在这上面耽搁了很长时间。 我试着把数据帧分成两个不同的数据帧,然后这样做,但我发现这有点不可能。在

任何建议都将不胜感激。在


Tags: 数据namedataframe条件gender事情yearak
0条回答
网友
1楼 · 发布于 2024-05-14 16:56:39

我已经定义了df1以进一步处理。我将索引设置为['name', 'gender'],然后unstack将“gender”放入列中。.births关注出生。然后我把最小值除以最大值,以避免被零除。在

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。在

网友
2楼 · 发布于 2024-05-14 16:56:39

pandas中的Pivot表在这里工作得很好:

pvt = pd.pivot_table(df,values='births',columns='gender',index='name',aggfunc='sum')
pvt[pvt['M'] == pvt['F']]

这将返回一个dataframe,名称作为索引,M,F表示列。男女通用的名字不太可能完全相同,所以你可以改为多条件的

^{pr2}$

相关问题 更多 >

    热门问题