gpt4 book ai didi

python - 基于列值的 Pandas 聚合减法

转载 作者:行者123 更新时间:2023-11-28 20:38:35 25 4
gpt4 key购买 nike

假设我有 DataFrame

'name'     'quantity'   'day'
'A' 1 'Monday'
'A' 10 'Sunday'
'A' 5 'Friday'
'B' 2 'Monday'
'B' 30 'Sunday'
'B' 5 'Thursday'

我需要构建的是另一个数据框,其中对于每个 name,我从周日的数量中减去周一的数量。所以,我想我需要一个 groupByname 上,然后是一个带有函数的 agg,但我不确定如何进行过滤器所以只考虑那些日子。

按照这个例子,我寻求的最终结果是

'name'     'sub_quantity'
'A' 9
'B' 28

最佳答案

设置

import pandas as pd
from io import StringIO

txt = """name quantity day
A 1 Monday
A 10 Sunday
A 5 Friday
B 2 Monday
B 30 Sunday
B 5 Thursday"""

df = pd.read_csv(StringIO(txt), delim_whitespace=True)

选项 1
展开

d1 = df.set_index(['name', 'day']).quantity.unstack()

d1.Sunday.sub(d1.Monday)

name
A 9.0
B 28.0
dtype: float64

选项 2
查询

s = df.set_index('name').query('day == "Sunday"').quantity
m = df.set_index('name').query('day == "Monday"').quantity
s - m

name
A 9
B 28
Name: quantity, dtype: int64

选项 3
xs

d1 = df.set_index(['day', 'name']).quantity
d1.xs('Sunday') - d1.xs('Monday')

name
A 9
B 28
Name: quantity, dtype: int64

选项 4
可爱的应用

def obnoxious(x):
s = x.day.eq('Sunday').idxmax()
m = x.day.eq('Monday').idxmax()
q = 'quantity'
return x.get_value(s, q) - x.get_value(m, q)

df.groupby('name').apply(obnoxious)

name
A 9
B 28
dtype: int64


时间
示例数据
enter image description here

关于python - 基于列值的 Pandas 聚合减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40847809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com