尝试使用非uniqu列的条件生成伪代码以应用于pandas

2024-09-29 01:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我对StackOverflow、python和pandas都是新手,我只是在探索编码的思维过程。我从来没有问过一个问题,所以我很抱歉,如果我弄乱了提问的格式

我的场景是,我有一个产品列表,作为一个数据帧,我将它与另一个名为ordered\u products的表(join)合并,使用product\u ID作为互键

这个数据集的问题是,有多少订单只有有机产品? 现在,当有人订购杂货时,一个订单ID可以有多个条目

我正在尝试编写一个循环伪代码:

counter = 0
break the table to group by order_id
For each group{
    For each index within the group{
         If (name of product) has the word "organic"
                {x = true}
         else
                {x = false}
    }
    If x = true,
         {add 1 to counter}
}

最后的计数器应该是只有“有机”产品的唯一订单的总数量

示例:

Order_id | Name           | 
1          organic bread
1          organic beans
1          regular milk
2          organic milk
2          organic lettuce
3          regular orange
3          regular bread

Output: counter = 1

出于某种原因,我就是搞不懂它,甚至无法将它应用到代码中! 我希望这有道理!如果有人能帮忙,我将不胜感激


Tags: theto数据代码订单idfor产品
1条回答
网友
1楼 · 发布于 2024-09-29 01:36:43

用途:

counter = df['Name'].str.contains('organic').groupby(df['Order_id']).all().sum()
print (counter)
1

详细说明:

如果匹配的organic输出是布尔掩码,则通过^{}进行Tirst测试:

print (df['Name'].str.contains('organic'))
0     True
1     True
2    False
3     True
4     True
5    False
6    False
Name: Name, dtype: bool

然后使用^{}检查每个组的所有True

print (df['Name'].str.contains('organic').groupby(df['Order_id']).all())
Order_id
1    False
2     True
3    False
Name: Name, dtype: bool

sumTrue最后计数数:

counter = df['Name'].str.contains('organic').groupby(df['Order_id']).all().sum()
print (counter)
1

或者另一个aprioach是get allOrder_idif not containsorganicvalue by~for invert mask,然后减去集合并检查其长度:

groups = df.loc[~df['Name'].str.contains('organic'), 'Order_id']
counter = len(set(df['Order_id']) - set(groups))
print (counter)
1

相关问题 更多 >