Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中相互减去行_Python_Pandas - Fatal编程技术网

Python 在数据帧中相互减去行

Python 在数据帧中相互减去行,python,pandas,Python,Pandas,我认为这是一个相当简单的问题,但就是无法让代码正确运行。这是我的数据帧的简化版本 df = pd.DataFrame([['Jan', 'Apples', 10], ['Feb', 'Apples', 14], ['Jan', 'Oranges', 24], ['Feb', 'Oranges', 18]], columns = ['Month', 'Fruit', 'Sales']) Month Frui

我认为这是一个相当简单的问题,但就是无法让代码正确运行。这是我的数据帧的简化版本

df = pd.DataFrame([['Jan', 'Apples', 10], ['Feb', 'Apples', 14], 
                   ['Jan', 'Oranges', 24], ['Feb', 'Oranges', 18]],
                    columns = ['Month', 'Fruit', 'Sales'])

  Month    Fruit  Sales
0   Jan   Apples     10
1   Feb   Apples     14
2   Jan  Oranges     24
3   Feb  Oranges     18

然后我想计算两个新的行,即2月份的销售额减去1月份的销售额,按水果类型分组。我已经看到了diff函数,它显然可以与这个简化的数据帧一起工作。但我的实际数据帧要大得多,我要减去的值之间的周期数不是常数。所以我在寻找loc和groupby的产品(我想是吧)


非常感谢您的建议。

IICU,这是您需要的。随着月数的增加,这将产生两个月之间的销售差异

df['dif']= df.groupby(['Fruit'])['Sales'].diff().fillna(0).astype(int)
print(df)
输出

    Month   Fruit   Sales   dif
0   Jan     Apples      10  0
1   Feb     Apples      14  4
2   Jan     Oranges     24  0
3   Feb     Oranges     18  -6

您可以使用下面的自定义函数

def func(mon1,mon2,fruit):
    g = df.groupby(['Fruit'])
    f = g.get_group(fruit)
    a = f.loc[f.Month == mon1, 'Sales'].iloc[0]
    b = f.loc[f.Month == mon2, 'Sales'].iloc[0]
    return b-a

将函数调用为,例如
func('Jan'、'Feb'、'Oranges')
&您将得到各个水果月份之间的销售额差异。

要确保从
Jan
中减去
Feb
的销售额,一个选项是将
Month
列定义为
pd.Categorical
,为
类别
指定订单,并获取前两个
销售
值中的
差异
,这也将与其他月份一起使用:

   Month    Fruit  Sales
0   Jan   Apples     10
2   Apr   Apples     21
3   Feb   Apples     14
4   Apr   Apples     21
5   Jan  Oranges     24
6   Feb  Oranges     18


我要减去的值之间的周期数不是恒定的
,发生这种情况时,您能分享一个示例吗?并分享预期产出
df['Month'] = pd.Categorical(df.Month.tolist(), categories=['Jan', 'Feb'])
df.sort_values('Month', inplace=True)
df.groupby('Fruit').Sales.apply(lambda x: x.head(2).diff().iloc[1])

Fruit
Apples     4.0
Oranges   -6.0
Name: Sales, dtype: float64
​