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