gpt4 book ai didi

python - 用 Pandas 拆分 DataFrame 行

转载 作者:行者123 更新时间:2023-11-28 16:24:07 28 4
gpt4 key购买 nike

我目前正在尝试找出将单个 panadas DataFrame 行拆分为多个稍微更改的行的有效方法。想象一下这样的结构:

    A  C1  C2  C3  C4
1 a b c a
2 b a e b a
3 g c
4 d e

我想以这样的结构结束:

    A   C
1 a b
2 a c
3 a a
4 b a
5 b e
6 b b
7 b a
8 g c
9 d e
10 d e

到目前为止,我一直在使用 for 循环并创建类似的字典(df 是我的 DataFrame):

rows = []
for i, r in df.iterrows():
tmp = r[1:].dropna()
for c in tmp.values:
dict = {'A': r[0], 'C': c}
rows.append(dict)

不幸的是,这种方法非常慢。到目前为止,在我使用 pandas 之后,我发现仅使用它可以显着缩短执行时间,但我没有太多经验来弄清楚如何使这种情况更快。

有人可以建议,可以做些什么来加快速度吗?

最佳答案

试试这个:

In [10]: pd.melt(df, id_vars='A', value_vars=['C1','C2','C3','C4'])
Out[10]:
A variable value
0 a C1 b
1 b C1 a
2 g C1 c
3 d C1 e
4 a C2 c
5 b C2 e
6 g C2 NaN
7 d C2 NaN
8 a C3 a
9 b C3 b
10 g C3 NaN
11 d C3 NaN
12 a C4 NaN
13 b C4 a
14 g C4 NaN
15 d C4 NaN

如果你想摆脱 NaN 的:

In [15]: pd.melt(df, id_vars='A', value_vars=['C1','C2','C3','C4'], value_name='C')[['A','C']].dropna()
Out[15]:
A C
0 a b
1 b a
2 g c
3 d e
4 a c
5 b e
8 a a
9 b b
13 b a

相同,但动态选择 C* 列:

In [21]: (pd.melt(df, id_vars='A',
....: value_vars=df.filter(like='C').columns.tolist(),
....: value_name='C')[['A','C']]
....: .dropna()
....: )
Out[21]:
A C
0 a b
1 b a
2 g c
3 d e
4 a c
5 b e
8 a a
9 b b
13 b a

关于python - 用 Pandas 拆分 DataFrame 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997768/

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