gpt4 book ai didi

python - 如何对一个键列进行分组,在第二列上使用条件并分别为工作日和周末添加第三列?

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:22 24 4
gpt4 key购买 nike

我的数据框有 3 列。 ID、日期类型(星期一 = 0、星期日 = 6)和数量。

我想以一种方式进行分组,对于每个“Id”,我将有 2 行,一行包含工作日(周一至周五)的总数,另一行包含周末。

Id  Qty  DayType
B07 581 0
B07 1096 1
B07 1245 2
B07 1080 3
B07 856 4
B07 581 5
B07 1096 6
B08 1345 0
B08 1580 3
B08 816 4

预期输出

Id  Qty  DayType
B07 4858 0
B07 1677 1
B08 3741 0

输出中 DayType 中的 0 表示工作日,1 表示周末。

此外,如果您可以建议稍后如何进行旋转,那将会非常有帮助

id weekday weekend
B07 4858 1677
B08 3741 0

我找到了一些基于条件的 groupby 解决方案,但在这种情况下,有两个条件我无法弄清楚如何实现。谢谢。

<小时/>

根据 Ansev 建议的答案,我得到以下输出 -

Id  Weekdays  Weekend
B07 20817 3607
C03 22289 6569
F05 22807 6474

这是正确的。

但是当我根据 Ansev 在他的答案下的评论中的建议尝试非枢轴格式时,我得到了这个 -

id        Qty        DayType
B07 20817 43
B07 3607 44
C03 22289 43
C03 6569 44
F05 22807 43

正如您所看到的,它也添加了 DayType。我希望 0 和 1 代表工作日和周末。有什么建议吗?

最佳答案

理想的是使用 DataFrame.groupby 。要对一周中的某一天的类型进行分组,我们必须检查 df['DayType'] 何时大于或等于 5,我们还应该对每个 ID 。由于 df['Day'Type'].ge(5) 返回 FalseTrue,我们可以使用 np.whereSeries.replace/Series.mapTrueFalse 替换为 weekdaysweekend

aggregate_df = (df.groupby(['Id',df['DayType'].ge(5).astype(int)])['Qty']
.sum().reset_index().reindex(columns = ['Id','Qty','DayType']))
print(aggregate_df)

Id Qty DayType
0 B07 4858 0
1 B07 1677 1
2 B08 3741 0
<小时/>

最后我们使用DataFrame.pivot_table

final_result = (aggregate_df.assign(DayType = aggregate_df['DayType'].map({0:'Weekdays', 
1:'Weekend'}))
.pivot_table(columns='DayType',values = 'Qty',index='Id',fill_value=0)
.reset_index()
.rename_axis(columns=None))
print(final_result)

Id Weekdays Weekend
0 B07 4858 1677
1 B08 3741 0

关于python - 如何对一个键列进行分组,在第二列上使用条件并分别为工作日和周末添加第三列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756486/

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