gpt4 book ai didi

python - Pandas groupby 转置

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

我有一个来自 SAP 的文件,在处理数据时它不是最漂亮的文件。因此,使用 series.str.contains() 和 bool 掩码,我设法缩小到如下所示的数据框:

       0        1
0 SUB 123
1 CAT SKU
2 CODE 1000123
3 CODE 1000234
4 SUB 456
5 CAT LIQ
6 CODE1 1000345
7 CODE1 1000534
8 CODE1 1000433

我正在寻找一种方法,可以将每个 SUB 分成一个新条目,如下所示:

print(expected_df)

SUB CAT CODE CODE1
0 123 SKU 1000123.0 NaN
1 123 SKU 1000234.0 NaN
2 456 LIQ NaN 1000345.0
3 456 LIQ NaN 1000534.0
4 456 LIQ NaN 1000433.0

我似乎无法通过这一步。然而,这一行:

df[0].eq('SUB').cumsum()

有助于隔离组,如果需要可以用作辅助系列。

如果您能帮助我们转换所示的数据,我们将不胜感激。

谢谢。

最佳答案

对于特定的“SUB”列组行,您可以尝试使用 df.pivot,然后使用 .ffill(),bfill()。

df1 = df.pivot(columns='0')
df1.columns = df1.columns.map(lambda x: x[1])
df1.SUB = df1.SUB.ffill()
df1.groupby('SUB').ffill().groupby('SUB').bfill().drop_duplicates()
#5.89 ms ± 1.84 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

# as time constraints, without use of lambda operation
#df1.groupby(df1.SUB.ffill()).apply(lambda x: x.ffill().bfill()).drop_duplicates()
#16 ms ± 1.06 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

输出:

    SUB CAT CODE    CODE1   SUB
2 123 SKU 1000123 NaN 123
3 123 SKU 1000234 NaN 123
6 456 LIQ NaN 1000345 456
7 456 LIQ NaN 1000534 456
8 456 LIQ NaN 1000433 456

关于python - Pandas groupby 转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325191/

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