假设我们有:
df1=
col1 col2 col3
[a,b] [c,d] 0.5
[e,f] [g,h] 0.7
想要根据df1:
返回一个新的df2df2=
col1 col2 col3
a c 0.5
a d 0.5
b c 0.5
b d 0.5
e g 0.7
e h 0.7
f g 0.7
f h 0.7
基本上,需要在df1的col1和col2中显示列表之间的所有组合,列表的长度可能大于2.
感谢您的帮助!
答案 0 :(得分:1)
我打破了步骤
import itertools
df['Min']=list(zip(df.col1,df.col2))
df['New']=df.Min.apply(lambda x : list(itertools.product(x[0],x[1])))
df1=df.set_index('col3')['New']
df1.apply(pd.Series).stack().apply(pd.Series).reset_index().\
drop('level_1',1).rename(columns={0:'col1',1:'col2'})
Out[588]:
col3 col1 col2
0 0.5 a c
1 0.5 a d
2 0.5 b c
3 0.5 b d
4 0.7 e g
5 0.7 e h
6 0.7 f g
7 0.7 f h
答案 1 :(得分:1)
一种hacky方式只是写出理解:
In [11]: pd.DataFrame([{"col1": c1, "col2": c2, "col3": row["col3"]}
for _, row in df.iterrows()
for c1 in row["col1"] for c2 in row["col2"]])
Out[11]:
col1 col2 col3
0 a c 0.5
1 a d 0.5
2 b c 0.5
3 b d 0.5
4 e g 0.7
5 e h 0.7
6 f g 0.7
7 f h 0.7