gpt4 book ai didi

python - Pandas stack() 如果列具有特定值

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

我试图根据 ID 列堆叠此表,但只考虑值为 1 而不是 0 的列 [A-D]。

当前 df:

<表类="s-表"><头>IDABCD<正文>11001301017101181000

我想要的:

<表类="s-表"><头>ID字母<正文>1A1D3B3D7A7C7D8A

以下代码有效,但我需要一个更高效的解决方案,因为我有一个 93434 行 x 12377 列的 df。

stacked_df = df.set_index('ID').stack().reset_index(name='has_letter').rename(columns={'level_1':'LETTER'})
stacked_df = stacked_df[stacked_df['has_letter']==1].reset_index(drop=True)
stacked_df.drop(['has_letter'], axis=1, inplace=True)

最佳答案

尝试:

print(
df.set_index("ID")
.apply(lambda x: x.index[x == 1], axis=1)
.reset_index()
.explode(0)
.rename(columns={0: "LETTERS"})
)

打印:

   ID LETTERS
0 1 A
0 1 D
1 3 B
1 3 D
2 7 A
2 7 C
2 7 D
3 8 A

或者:

x = df.set_index("ID").stack()
print(
x[x == 1]
.reset_index()
.drop(columns=0)
.rename(columns={"level_1": "LETTER"})
)

打印:

   ID LETTER
0 1 A
1 1 D
2 3 B
3 3 D
4 7 A
5 7 C
6 7 D
7 8 A

关于python - Pandas stack() 如果列具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72369298/

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