Python 自定义熔化/折叠熊猫

Python 自定义熔化/折叠熊猫,python,pandas,numpy,Python,Pandas,Numpy,我对熊猫还有另一个问题。我可以利用循环完成以下任务,但由于输入的大小,这将是非常低效的。请让我知道是否有解决方案 我想基于DF a创建一个新的DF_C。我需要基于COL_a和COL_B列创建多行(值将用逗号分隔)。状态中始终有一个元素 行的顺序无关紧要 我有一个DFA: State COL_A B_COL 01 01 03, 01 02 01, 03 01, 04 02 07

我对熊猫还有另一个问题。我可以利用循环完成以下任务,但由于输入的大小,这将是非常低效的。请让我知道是否有解决方案

我想基于DF a创建一个新的DF_C。我需要基于COL_a和COL_B列创建多行(值将用逗号分隔)。状态中始终有一个元素

行的顺序无关紧要

我有一个DFA:

State       COL_A        B_COL
01           01          03, 01
02           01, 03      01, 04
02           07          03
04           01          05
我想要一个结果df_c:

 State       COL_A        B_COL
 01            01          03
 01            01          01
 02            01          01
 02            01          04
 02            03          01 
 02            03          04
 02            07          03
 04            01          05

您可以先在A列和B列上使用
str.split
,然后在每列上使用一个链接,如:

df_ = (df.assign(COL_A=lambda x: x['COL_A'].str.split(', '), 
                 B_COL=lambda x: x['B_COL'].str.split(', '))
         .explode('COL_A')
         .explode('B_COL')
       )
print (df_)
   State COL_A B_COL
0      1    01    03
0      1    01    01
1      2    01    01
1      2    01    04
1      2    03    01
1      2    03    04
2      2    07    03
3      4    01    05
编辑:如果你追求效率,也许可以考虑这样做

df_ = pd.DataFrame(
            [(s, a, b) 
             for s, cola, colb in zip(df['State'], df['COL_A'], df['B_COL'])
             for a in cola.split(', ') for b in colb.split(', ')], 
            columns=df.columns)

Ben.T第二种解决方案的替代方案,使用:


I don’谢谢你。这是一个非常优雅的解决方案。@Harsha谢谢,我添加了另一个带有loop for的方法,它可能更有效,因为explode还不是最有效的
from itertools import product,chain

flatten = chain.from_iterable

result = flatten(product([state],col_a.split(","),b_col.split(","))
          for state, col_a,b_col in df.to_numpy())

pd.DataFrame(result, columns = df.columns)

 State  COL_A   B_COL
0   1    01     03
1   1    01     01
2   2    01     01
3   2    01     04
4   2    03     01
5   2    03     04
6   2    07     03
7   4    01     05