gpt4 book ai didi

python - Pandas :根据组聚合添加新行

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:26 25 4
gpt4 key购买 nike

请帮忙!

一共有5种拒绝代码:EL1、EL2、EL3、EL4、EL5。我想追加新行,以便每个 ID 始终有 5 个拒绝代码。

这是我的原始DF:

+----+-------------+-----+
| ID | Reject Code | QTY |
+----+-------------+-----+
| A | EL1 | 7 |
| A | EL2 | 2 |
| A | EL3 | 33 |
| B | EL1 | 7 |
| B | EL2 | 1 |
| B | EL3 | 7 |
| B | EL4 | 36 |
| B | EL5 | 5 |
| C | EL1 | 3 |
| C | EL2 | 32 |
+----+-------------+-----+

ID B 包含所有拒绝代码,因此我们不需要向其添加任何行。

ID A只有EL1、EL2和EL3,那么如何追加2行并将EL4和EL5设置为0 QTY?

和ID C一样,需要追加3行,EL3,EL4,EL5?

我想输出为:

+----+-------------+-----+
| ID | Reject Code | QTY |
+----+-------------+-----+
| A | EL1 | 7 |
| A | EL2 | 2 |
| A | EL3 | 33 |
| A | EL4 | 0 |
| A | EL5 | 0 |
| B | EL1 | 7 |
| B | EL2 | 1 |
| B | EL3 | 7 |
| B | EL4 | 36 |
| B | EL5 | 5 |
| C | EL1 | 3 |
| C | EL2 | 32 |
| C | EL3 | 0 |
| C | EL4 | 0 |
| C | EL5 | 0 |
+----+-------------+-----+

最佳答案

你可以做pivot_table,然后melt/stack:

# all reject codes
Rej_Codes = [f'EL{i+1}' for i in range(5)]

(df.pivot_table(index='ID',
columns='Reject Code',
values='QTY',
fill_value=0)
.reindex(Rej_Codes, axis=1, fill_value=0) # as pointed out by rafaelc
.stack()
.reset_index(name='QTY')
)

输出:

   ID Reject Code  QTY
0 A EL1 7
1 A EL2 2
2 A EL3 33
3 A EL4 0
4 A EL5 0
5 B EL1 7
6 B EL2 1
7 B EL3 7
8 B EL4 36
9 B EL5 5
10 C EL1 3
11 C EL2 32
12 C EL3 0
13 C EL4 0
14 C EL5 0

关于python - Pandas :根据组聚合添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59145651/

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