gpt4 book ai didi

python - pandas Groupby 求和并连接

转载 作者:行者123 更新时间:2023-12-05 09:08:45 27 4
gpt4 key购买 nike

我有一个数据框如下

+-----------+----------+-----+
| InvoiceNo | ItemCode | Qty |
+-----------+----------+-----+
| Inv-001 | c | 1 |
+-----------+----------+-----+
| Inv-001 | b | 2 |
+-----------+----------+-----+
| Inv-001 | a | 1 |
+-----------+----------+-----+
| Inv-002 | a | 3 |
+-----------+----------+-----+
| Inv-002 | b | 1 |
+-----------+----------+-----+
| Inv-002 | c | 1 |
+-----------+----------+-----+
| Inv-002 | d | 4 |
+-----------+----------+-----+
| Inv-002 | a | 1 |
+-----------+----------+-----+
| Inv-003 | e | 1 |
+-----------+----------+-----+
| Inv-003 | b | 2 |
+-----------+----------+-----+

我想计算每个单独的 InvoiceNo 明智的项目组合。即每个 ItemCode 的总和。排序并连接到一个字符串。注意:在 Inv-002 产品 a 中有 2 行。

我想要/要求的输出如下

+-----------+--------------------+
| InvoiceNo | Desired result |
+-----------+--------------------+
| Inv-001 | a-1, b-2, c-1 |
+-----------+--------------------+
| Inv-002 | a-4, b-1, c-1, d-4 |
+-----------+--------------------+
| Inv-003 | b-2, e-1 |
+-----------+--------------------+

到目前为止我已经写了下面的代码

#load data
df = pd.read_excel('data.xlsx')

#groupby and sum
g = df.groupby(['InvoiceNo','ItemCode']).sum()

# Codes to convert the MultiIndex to a regualr dataframe
g = g.unstack(fill_value=0)
g.reset_index(drop=True,inplace=True)
g = g.droplevel(level=0, axis=1).fillna(0)

#calculation
g.dot(g.columns+',').str[:-1]

下面是我得到的结果。所有项目分开。

+---+---------------------+
| 0 | a,b,b,c |
+---+---------------------+
| 1 | a,a,a,a,b,c,d,d,d,d |
+---+---------------------+
| 2 | b,b,e |
+---+---------------------+

请指导我解决这个问题。

最佳答案

groupby 两次。第一个获取每个 ['InvoiceNo', 'ItemCode'] 的总和。然后我们将代码和类别与“-”连接在一起,并对发票进行分组以创建完整的字符串。

df1 = df.groupby(['InvoiceNo', 'ItemCode'])['Qty'].sum().reset_index('ItemCode')

df1 = df1['ItemCode'].str.cat(df1['Qty'].astype(str), '-').groupby(level=0).agg(', '.join)

#InvoiceNo
#Inv-001 a-1, b-2, c-1
#Inv-002 a-4, b-1, c-1, d-4
#Inv-003 b-2, e-1
#Name: ItemCode, dtype: object

您会注意到我不需要对任何东西进行排序。这是因为 groupby 默认情况下对分组键进行排序,因此在第一行之后系列保证按 ['InvoiceNo', 'ItemCode'] 排序,即在 ', '.join

之前我们想要什么

关于python - pandas Groupby 求和并连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63078869/

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