gpt4 book ai didi

python - 生成每列的出现次数,但相对于另一列?

转载 作者:行者123 更新时间:2023-12-01 00:35:21 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

   Machine |    Date   | ticket | Heavy | Med | Low |  
Mach_1 1/2/1992 abb 1 0 0
Mach_1 1/6/1992 abb 1 0 1
Mach_1 1/6/1992 att 0 0 1
Mach_2 1/2/1992 avm 1 0 0
Mach_2 1/14/1992 avm 1 0 0
Mach_2 1/2/1992 avm 1 0 0

我想生成一个新表,其中包含每台机器的功能的出现次数,但仅限于具有相同名称、相同日期但不同票证代码的机器。

这样它就可以生成一个像这样的新DataFrame:

   Machine |    Date    | Heavy | Med | Low |  
Mach_1 1/2/1992 1 0 0
Mach_1 1/6/1992 1 0 2
Mach_2 1/2/1992 1 0 0
Mach_2 1/14/1992 1 0 0
Mach_2 1/2/1992 1 0 0

例如:1/6/1992 上的 Mach_1Heavy 计数为 1,因为它只该日期出现了一次,但的计数为2,因为它出现了两次。

谢谢!

最佳答案

使用重复 + groupby。这是一个更棘手的问题,因为您想保留重复的行,只是不想对它们进行求和。解决方案是确保使用 cumsum 为每个重复行分配一个新的 id,然后在分组中使用该键。

<小时/>
d = df.duplicated(['Machine', 'Date', 'ticket'])
never_group = d.groupby(d).cumsum()

df.groupby(['Machine', 'Date', never_group], as_index=False, sort=False).sum()

  Machine       Date  Heavy  Med  Low
0 Mach_1 1/2/1992 1 0 0
1 Mach_1 1/6/1992 1 0 2
2 Mach_2 1/2/1992 1 0 0
3 Mach_2 1/14/1992 1 0 0
4 Mach_2 1/2/1992 1 0 0
<小时/>

说明

查找重复值有助于我们生成组。

>>> d = df.duplicated(['Machine', 'Date', 'ticket'])
>>> d
0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

接下来我们必须确保为所有重复的值分配一个唯一的键

>>> d.groupby(d).cumsum().view('i1')
0 0
1 0
2 0
3 0
4 0
5 1
dtype: int8

这确保即使一个值重复多次,它也会作为唯一行保留在最终结果中,但不会聚合,假设您的 DataFrame 如下所示:

  Machine       Date ticket  Heavy  Med  Low
0 Mach_1 1/2/1992 abb 1 0 0
1 Mach_1 1/6/1992 abb 1 0 1
2 Mach_1 1/6/1992 att 0 0 1
3 Mach_2 1/2/1992 avm 1 0 0
4 Mach_2 1/14/1992 avm 1 0 0
5 Mach_2 1/2/1992 avm 1 0 0
6 Mach_2 1/2/1992 avm 1 0 0

我们有三个重复值需要分开

>>> d = df.duplicated(['Machine', 'Date', 'ticket'])
>>> d.groupby(d).cumsum()
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 1.0
6 2.0
dtype: float64

关于python - 生成每列的出现次数,但相对于另一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825264/

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