我有一个这样的数据框:
print(df)
0 1 2
0 354.7 April 4.0
1 55.4 August 8.0
2 176.5 December 12.0
3 95.5 February 2.0
4 85.6 January 1.0
5 152 July 7.0
6 238.7 June 6.0
7 104.8 March 3.0
8 283.5 May 5.0
9 278.8 November 11.0
10 249.6 October 10.0
11 212.7 September 9.0
Run Code Online (Sandbox Code Playgroud)
如您所见,月份不是日历顺序.所以我创建了第二列,以获得与每个月相对应的月份数(1-12).从那里,我如何根据日历月的顺序对此数据框进行排序?
我发现Pandas groupby 累积总和并发现它非常有用。但是,我想确定如何计算反向累积和。
该链接建议如下。
df.groupby(by=['name','day']).sum().groupby(level=[0]).cumsum()
Run Code Online (Sandbox Code Playgroud)
为了反转总和,我尝试对数据进行切片,但失败了。
df.groupby(by=['name','day']).ix[::-1, 'no'].sum().groupby(level=[0]).cumsum()
Jack | Monday | 10 | 90
Jack | Tuesday | 30 | 80
Jack | Wednesday | 50 | 50
Jill | Monday | 40 | 80
Jill | Wednesday | 40 | 40
Run Code Online (Sandbox Code Playgroud)
编辑:根据反馈,我尝试实现代码并使数据框更大:
import pandas as pd
df = pd.DataFrame(
{'name': ['Jack', 'Jack', 'Jack', 'Jill', 'Jill'],
'surname' : ['Jones','Jones','Jones','Smith','Smith'],
'car' : ['VW','Mazda','VW','Merc','Merc'],
'country' : ['UK','US','UK','EU','EU'],
'year' : [1980,1980,1980,1980,1980],
'day': ['Monday', 'Tuesday','Wednesday','Monday','Wednesday'],
'date': ['2016-02-31','2016-01-31','2016-01-31','2016-01-31','2016-01-31'],
'no': [10,30,50,40,40],
'qty' : …Run Code Online (Sandbox Code Playgroud) 我有一个 pyspark 数据框:
Location Month Brand Sector TrueValue PickoutValue
USA 1/1/2021 brand1 cars1 7418 30000
USA 2/1/2021 brand1 cars1 1940 2000
USA 3/1/2021 brand1 cars1 4692 2900
USA 4/1/2021 brand1 cars1
USA 1/1/2021 brand2 cars2 16383104.2 16666667
USA 2/1/2021 brand2 cars2 26812874.2 16666667
USA 3/1/2021 brand2 cars2
USA 1/1/2021 brand3 cars3 75.6% 70.0%
USA 3/1/2021 brand3 cars3 73.1% 70.0%
USA 2/1/2021 brand3 cars3 77.1% 70.0%
Run Code Online (Sandbox Code Playgroud)
我有每个品牌从 1/1/2021 到 12/1/2021 的月份值。我需要创建另一列,其中包含基于品牌和部门并按月排序的 TrueValue 列的累积总和。具有%值的行应该是累积总和除以月数。
我的预期数据框是:
Location Month Brand Sector TrueValue PickoutValue TotalSumValue …Run Code Online (Sandbox Code Playgroud) 我有一个类似以下的数据框(下面是特定数据,这是通用的)。否给我累加的总和:
no
name day
Jack Monday 10
Tuesday 40
Wednesday 90
Jill Monday 40
Wednesday 150
Run Code Online (Sandbox Code Playgroud)
我想“展开”累计金额,以便给我这样的东西:
print df
name day no
0 Jack Monday 10
1 Jack Tuesday 30
2 Jack Wednesday 50
3 Jill Monday 40
4 Jill Wednesday 110
Run Code Online (Sandbox Code Playgroud)
本质上,我想执行以下操作,但相反: 熊猫groupby累积和
python ×4
pandas ×3
apache-spark ×1
dataframe ×1
group-by ×1
pyspark ×1
python-2.7 ×1
reverse ×1
sorting ×1