python - 在 Python 中创建具有多个操作的函数

标签 python pandas dataframe

我目前正在做一个包含婴儿名字数据的项目。我正在查看从 1950 年代开始的每个十年中最受欢迎的男性和女性婴儿名字。我正在尝试创建一个函数来打印出我输入的数据集的顶级名称。

到目前为止,我已经成功地为每个十年创建了两个数据集(一个男性和另一个女性)

这是我的函数代码,但我似乎无法弄清楚如何让它工作......

def getTopName(data):
    (data
        .drop(columns =['sex', 'prop'])
        .pivot(index = 'name', columns = 'year', values = 'n')
        .sum(axis=1) = data['decade']
        .sort_values(by = 'decade', ascending = False))
    print data[0:1]

关于如何实现这一点有什么建议吗?

我的数据是这样的: my data

目前是长版。我可以创建一个中间函数,将其转换为宽格式并构建一个新列,其中可以将每年(1960 年、1961 年、... 1969 年)的总计加在一起吗?

最佳答案

问题 1 - 每年 n 最高的名字

df.groupby(by='name', as_index=False)
      .count()
      .nlargest(1, 'number')
      .iloc[0]["name"]

Sample data

问题 2 - 将数据转换为宽格式

Sample data对此进行了测试

pandas 中的 Pivot 不进行聚合。因此,我将获得每年总计和每十年总计的步骤分开。最后,我加入这两个以获得所需的结果:

import pandas as pd

df = pd.read_csv('set2.csv')

# add decade column
df["decade"] = df["year"] - (df["year"] % 10)

# add decade_title column to prevent join clashes
df["decade_total"] = df["decade"]
                       .apply(lambda decade_num: f"{str(decade_num)}_total")

# first pivot with n per year
per_year_df = df.pivot(index="name", columns="year", values="n")

# pivot cannot aggregate so we first aggregate and then pivot
per_decade_df = df\
    .groupby(by=["decade_total", "name"], as_index=False)\
    .agg({"n": 'sum'})\
    .pivot(index="name", columns="decade_total", values="n")

# finally we join the decade totals to the yearly counts
joined_df = per_year_df.join(per_decade_df)

Joined result table

关于python - 在 Python 中创建具有多个操作的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53252469/

相关文章:

python - 如何使用python加载Mysql到Elasticsearch

Python 向 "1"= ="1"返回 false。任何想法为什么?

python - Pandas 中 "in"关键字或子查询的等价物

python - 使用 Python 组合多个 CSV 文件

python - 查找 pandas 系列中元素之间的所有成对差异

r - 在没有循环的情况下对分组行进行计算

python - 如何从列表中选择只有 6 列的数据框

python - Pandas 基于最后一个值的合并函数

python : Mouse click coordinates as simply as possible

Python 正则表达式 : get all group's sequence