設置
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
unstack
d1 = df.set_index(['name', 'day']).quantity.unstack()
d1.Sunday.sub(d1.Monday)
name
A 9.0
B 28.0
dtype: float64
選項2
query
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
可愛apply
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
定時
例如數據