groupby语句是否会导致数据帧折叠为序列?

2024-06-16 09:37:10 发布

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

我从一个大数据帧开始。我整理了一些专栏。我保存的最后一个(相当大)数据帧的头部如下所示:

# bsa_mod = 'best supporting actress modified' dataframe
[1] bsa_mod = bsa_mod[['Year', 'Name', 'Winner']]
[2] bsa_mod.head()

    Year    Name              Winner
431 1936    Beulah Bondi        0.0
432 1936    Alice Brady         0.0
433 1936    Bonita Granville    0.0
434 1936    Maria Ouspenskaya   0.0
435 1936    Gale Sondergaard    1.0

我需要把所有的名字组合在一起,并计算每个名字旁边的虚拟变量。例如,Agnes Morehead出现在Name列中4次,每次在她的名字旁边都有一个0或1,因此最终的摘要表应该是'Agnes Morehead 4'。我得到了以下信息:

# aggregate nominations by actress
bsa_mod_count = bsa_mod.groupby('Name').Winner.count()
Name
Abigail Breslin    1
Adriana Barraza    1
Agnes Moorehead    4
Alfre Woodard      1
Alice Brady        2
Name: Winner, dtype: int64

我对此运行了.descripe()以获取摘要统计信息,发现计算的最大值是6。你知道吗

我想通过运行这样的程序来找出这个神秘的人是谁:

most_nominations = bsa_mod_count[bsa_mod_count.Winner == 6]

令我惊讶的是,我得到了一个属性错误,说“Winner”不存在,我现在处理的数据类型是一个序列,不再是一个数据帧。你知道吗

数据帧是否在“groupby”之后退化为一个序列?我没想到我的索引会被覆盖,这似乎也是在我运行.agg(['count'])时发生的。有没有其他方法可以做到这一点,以便保留我的数据帧并使“6”可用?你知道吗


Tags: 数据name信息modcount名字yearalice
2条回答

答案是否定的,分组确实保留了结构。你知道吗

在您的示例中,bsa_mod.groupby('Name').Winner.count()返回一个series对象,而bsa_mod.groupby('Name').count()返回一个数据帧。你知道吗

#if you want to retain the index and the dataframe format, try below:
bsa_mod['Winner_Count'] = bsa_mod.apply(lambda x: bsa_mod.Name.value_counts()[x.Name],axis=1)
print(bsa_mod)

     Year               Name  Winner  Winner_Count
431  1936       Beulah Bondi     0.0             1
432  1936        Alice Brady     0.0             1
433  1936   Bonita Granville     0.0             1
434  1936  Maria Ouspenskaya     0.0             1
435  1936   Gale Sondergaard     1.0             1

#Then you can do something like:
bsa_mod[bsa_mod.Winner_Count == 2]

相关问题 更多 >