Python 分组差异和百分比变化

Python 分组差异和百分比变化,python,pandas,Python,Pandas,我有以下数据框 t_f m_s uni A False 1.2 A True 0.6 B False 0.9 B True 0.6 m_s_diff m_s_diff_percentage uni A -0.6 -50%

我有以下数据框

              t_f      m_s
   uni        
   A          False    1.2
   A          True     0.6
   B          False    0.9
   B          True     0.6
              m_s_diff   m_s_diff_percentage
   uni        
   A          -0.6         -50%
   B          -0.3         -33.33%
我试图得到每个uni的真-假差异,并计算真/假百分比变化 我确信有一种方法可以通过使用group by来做到这一点,但我不知道该怎么做

输出应该是一个数据帧

              t_f      m_s
   uni        
   A          False    1.2
   A          True     0.6
   B          False    0.9
   B          True     0.6
              m_s_diff   m_s_diff_percentage
   uni        
   A          -0.6         -50%
   B          -0.3         -33.33%
使用查询

df.query('t\u f==True')。m\u s-df.query('t\u f==False')。m\u s

使用查询

df.query('t\u f==True')。m\u s-df.query('t\u f==False')。m\u s

试试这个

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
试试这个

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

你能添加预期的输出吗?
df.iloc[::2,:][m_s']-df.iloc[1::2][m_s']
像这样?不清楚这些数据是否代表您的整个输入和输出。这只是我的数据的快照。groupby(level=0)。diff().dropna()@Wen,请把它转换成一个答案。您能添加预期的输出吗?
df.iloc[::2,:]['m_s']-df.iloc[1::2]['m_s']
像这样吗?不清楚这些数据是否代表您的全部输入和输出。这只是我的数据的快照。
df.groupby(level=0)。diff().dropna()
@Wen,请把它转换为一个答案。小调整:
df.groupby(level=0)['m_'].agg(['diff','pct_change'])。dropna()
小调整:
df.groupby(level=0)['m_'].agg(['diff','pct_change'])。dropna()