gpt4 book ai didi

python - 将 pandas 列值转换为行

转载 作者:太空狗 更新时间:2023-10-29 21:27:52 25 4
gpt4 key购买 nike

我正在尝试将数据框转换为长格式。

我开始的数据框:

df = pd.DataFrame([['a', 'b'],
['d', 'e'],
['f', 'g', 'h'],
['q', 'r', 'e', 't']])
df = df.rename(columns={0: "Key"})

Key 1 2 3
0 a b None None
1 d e None None
2 f g h None
3 q r e t

不指定列数,可能超过4列。键后每个值应该有一个新行

这得到了我所需要的,但是,似乎应该有一种方法可以做到这一点而不必删除空值:

new_df = pd.melt(df, id_vars=['Key'])[['Key', 'value']]
new_df = new_df.dropna()


Key value
0 a b
1 d e
2 f g
3 q r
6 f h
7 q e
11 q t​

最佳答案

选项 1
你应该能够用 set_index + stack 来做到这一点:

df.set_index('Key').stack().reset_index(level=0, name='value').reset_index(drop=True)

Key value
0 a b
1 d e
2 f g
3 f h
4 q r
5 q s
6 q t

如果你不想一直重置索引,那么使用一个中间变量并创建一个新的DataFrame:

v = df.set_index('Key').stack()
pd.DataFrame({'Key' : v.index.get_level_values(0), 'value' : v.values})

  Key value
0 a b
1 d e
2 f g
3 f h
4 q r
5 q s
6 q t

这里的本质是 stack 默认情况下会自动摆脱 NaN(您可以通过设置 dropna=False 来禁用它)。


选项 2
使用 np.repeat 和 numpy 版本的 pd.DataFrame.stack 获得更多性能:

i = df.pop('Key').values
j = df.values.ravel()

pd.DataFrame({'Key' : v.repeat(df.count(axis=1)), 'value' : j[pd.notnull(j)]
})

Key value
0 a b
1 d e
2 f g
3 f h
4 q r
5 q s
6 q t

关于python - 将 pandas 列值转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441053/

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