gpt4 book ai didi

python - 对标记项的组求和,然后找到最大值

转载 作者:行者123 更新时间:2023-11-28 17:59:45 27 4
gpt4 key购买 nike

我想对按正流量和负流量分组的值求和,然后比较它们以找出最大的负流量和最大的正流量。

我认为 itertools 可能是执行此操作的方法,但无法弄清楚。

#create a data frame that shows week and value
n_rows = 30
dftest = pd.DataFrame({'week': pd.date_range('1/4/2019', periods=n_rows, freq='W'),
'value': np.random.randint(-100,100,size=(n_rows))})

#flag positives and negatives
def flowFinder(row):
if row['value'] > 0:
return "Positive"
else:
return "Negative"
dftest['flag'] = dftest.apply(flowFinder,axis=1)
dftest

In this example df ,您将确定 15-19 加起来为 249,这是所有正流量的最大值。最大负流是第 5 行,-98。

Scott Boston 编辑最好添加生成数据框的代码而不是图片链接。

df = pd.DataFrame({'week':pd.date_range('2019-01-06',periods=21, freq='W'), 
'value':[64,43,94,-19,3,-98,1,80,-7,-43,45,58,27,29,
-4,20,97,30,22,80,-95],
'flag':['Positive']*3+['Negative']+['Positive']+['Negative']+
['Positive']*2+['Negative']*2+['Positive']*4+
['Negative']+['Positive']*5+['Negative']})

最佳答案

你可以试试这个:

df.groupby((df['flag'] != df['flag'].shift()).cumsum())['value'].sum().agg(['min','max'])

输出:

min    -98
max 249
Name: value, dtype: int64

使用重命名:

df.groupby((df['flag'] != df['flag'].shift()).cumsum())['value'].sum().agg(['min','max'])\
.rename(index={'min':'Negative','max':'Positive'})

输出:

Negative    -98
Positive 249
Name: value, dtype: int64

更新答案评论:

df_out = df.groupby((df['flag'] != df['flag'].shift()).cumsum())['value','week']\
.agg({'value':'sum','week':'last'})
df_out.loc[df_out.agg({'value':['idxmin','idxmax']}).squeeze().tolist()]

输出:

      value       week
flag
4 -98 2019-02-10
9 249 2019-05-19

关于python - 对标记项的组求和,然后找到最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56224042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com