【发布时间】:2022-10-13 18:02:04
【问题描述】:
我想根据熊猫数据框中的月份计算不同列的 QTD 值。
代码:
data = {'month': ['April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March'],
'kpi': ['sales', 'sales quantity', 'sales', 'sales', 'sales', 'sales', 'sales', 'sales quantity', 'sales', 'sales', 'sales', 'sales'],
're': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
're3+9': [10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 10, 20],
're6+6': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],
're9+3': [2, 4, 6, 8, 10, 12, 14, 16, 20, 10, 10, 20],
're_o' : [1, 1, 1, 11, 11, 11, 12, 12, 12, 13, 13, 13]
}
# Create DataFrame
df = pd.DataFrame(data)
g = pd.to_datetime(df['month'], format='%B').dt.to_period('Q')
if (df['month'].isin(['April', 'May', 'June'])):
df['Q-Total'] = df.groupby([g,'kpi'])['re'].cumsum()
elif (df['month'].isin(['July', 'August', 'September'])):
df['Q-Total'] = df.groupby([g, 'kpi'])['re3+9'].cumsum()
elif (df['month'].isin(['October', 'November', 'December'])):
df['Q-Total'] = df.groupby([g, 'kpi'])['re6+6'].cumsum()
elif (df['month'].isin(['January', 'February', 'March'])):
df['Q-Total'] = df.groupby([g, 'kpi'])['re9+3'].cumsum()
else:
print("zero")
我需要的输出如下:
month kpi re re3+9 re6+6 re9+3 re_o Q-Total
0 April sales 1 10 5 2 1 1
1 May sales quantity 2 20 10 4 1 2
2 June sales 3 30 15 6 1 4
3 July sales 4 40 20 8 11 40
4 August sales 5 50 25 10 11 90
5 September sales 6 60 30 12 11 150
6 October sales 7 70 35 14 12 35
7 November sales quantity 8 80 40 16 12 40
8 December sales 9 90 45 20 12 80
9 January sales 10 10 50 10 13 10
10 February sales 11 10 55 10 13 20
11 March sales 12 20 60 20 13 40
这里有四列名为 re,re3+9,re6+6,re9+3 用于获取累积和值。我想根据以下条件计算累积和:
- 如果月份是 4 月、5 月和 6 月,则仅从列 re 中获取累积总和
- 如果月份是 7 月、8 月和 9 月,则仅从 re3+9 中取累计和
- 如果月份是 10 月、11 月和 12 月,则仅从 re6+6 中取累计和
- 如果月份是一月、二月和三月,则只取re9+3的累计和
但是当我运行代码时出现如下错误:
Traceback (most recent call last): File "/home/a/p/s.py", line 54, in <module> if (df['month'].isin(['April', 'May', 'June'])): File "/home/a/anaconda3/envs/p/lib/python3.9/site-packages/pandas/core/generic.py", line 1527, in __nonzero__ raise ValueError( ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().任何人都可以提出解决此问题的解决方案吗?
【问题讨论】:
标签: python-3.x pandas dataframe