python - 将多个函数应用于 pandas 数据框
问题描述
我正在寻找一种方法来从我的原始数据中集成多个应用功能。这是一些简化的代码。
import pandas as pd
df = pd.DataFrame({'name':["alice","bob","charlene","alice","bob","charlene","alice","bob","charlene","edna" ],
'date':["2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-02","2020-01-01","2020-01-02","2020-01-01"],
'contribution': [5,5,10,20,30,1,5,5,10,100],
'payment-type': ["cash","transfer","cash","transfer","cash","transfer","cash","transfer","cash","transfer",]})
df['date'] = pd.to_datetime(df['date'])
def myfunction(input):
output = input["name"].value_counts()
output.index.set_names(['name_x'], inplace=True)
return output
daily_count = df.groupby(pd.Grouper(key='date', freq='1D')).apply(myfunction)
print(daily_count.reset_index())
输出:
date name_x name
0 2020-01-01 bob 3
1 2020-01-01 charlene 2
2 2020-01-01 alice 2
3 2020-01-01 edna 1
4 2020-01-02 charlene 1
5 2020-01-02 alice 1
我想将此代码的输出集成到先前的结果中。
def myfunction(input):
output = input["contribution"].sum()
# output.index.set_names(['name_x'], inplace=True)
return output
daily_count = df.groupby([pd.Grouper(key='date', freq='1D'), "name"]).apply(myfunction)
这会给我类似的东西:
date name num_contrubutions total_pp
0 2020-01-01 bob 3 25
1 2020-01-01 charlene 2 40
2 2020-01-01 alice 2 11
3 2020-01-01 edna 1 100
4 2020-01-02 charlene 1 5
5 2020-01-02 alice 1 10
使用 apply() 对我来说很重要,因为我计划在函数中进行一些 API 调用和数据库查找。
ta,安德鲁
解决方案
df.groupby(["date","name"])["contribution"].agg(["count","sum"]).reset_index().sort_values(by="count",ascending=False)
#output
date name count sum
1 2020-01-01 bob 3 40
0 2020-01-01 alice 2 25
2 2020-01-01 charlene 2 11
3 2020-01-01 edna 1 100
4 2020-01-02 alice 1 5
5 2020-01-02 charlene 1 10
因此,首先,我们按日期和名称分组,然后选择要应用聚合/计算的列,首先是count
每个人的贡献。然后我们sum
他们。之后为了保持正常的形状dataframe
,我们reset_index
和我们sort_values
by="count"
在descending
某种程度上。
推荐阅读
- jms - ActiveMQ:集群中的咨询(代理网络)
- typescript - 带有 Typescript 的“jest-fetch-mock”:“没有调用签名”和“对象上不存在”错误
- c++ - -fno-char8_t 的 MSVC 等效项是什么?
- visual-studio-code - 禁用 Visual Studio Code 中的所有默认快捷方式
- haskell - Haskell中的简单国际象棋功能
- c++ - 所有可能长度的所有可能组合
- nginx - 新的 nginx 服务器块解析成功,但无法访问站点
- docker - 如何从容器化的 Dockerfile 向 GCP 进行身份验证
- amazon-web-services - API Gateway 自定义域 - 具有到阶段的空基本路径映射和空基本路径上的静态 html 页面
- asp.net-mvc - asp.net 4.5.2 中出现意外的 @Html.HiddenFor() 行为