我有以下数据框
t_f m_s
uni
A False 1.2
A True 0.6
B False 0.9
B True 0.6
我正在尝试为每个uni获得True - False的差异,并且还计算百分比变化True-False / False 我确信使用group by有一种方法可以做到这一点,但我无法弄清楚如何。
输出应该是数据框
m_s_diff m_s_diff_percentage
uni
A -0.6 -50%
B -0.3 -33.33%
答案 0 :(得分:2)
试试这个..
df.groupby(level=0)['m_s'].diff().dropna()
uni
A -0.6
B -0.3
Name: m_s, dtype: float64
以下是@MaxU提供的解决方案
df.groupby(level=0)['m_s'].agg(['diff','pct_change']).dropna()
Out[502]:
diff pct_change
uni
A -0.6 -0.500000
B -0.3 -0.333333
答案 1 :(得分:1)
使用查询。
df.query('t_f==True').m_s - df.query('t_f==False').m_s