方法一(OP)
pd.DataFrame([[item]+list(df.loc[line,'B':]) for line in df.index for item in df.loc[line,'A']],
columns=df.columns)
方法2(pir)
df1 = df.A.apply(pd.Series).stack().rename('A')
df2 = df1.to_frame().reset_index(1, drop=True)
df2.join(df.B).reset_index(drop=True)
方法3(pir)
A = np.asarray(df.A.values.tolist())
B = np.stack([df.B for _ in xrange(A.shape[1])]).T
P = np.stack([A, B])
pd.Panel(P, items=['A', 'B']).to_frame().reset_index(drop=True)
感谢@user113531 引用亚历山大的答案。我必须修改它才能工作。
方法4(@Alexander)链接答案 https://stackoverflow.com/questions/32468402/how-to-explode-a-list-inside-a-dataframe-cell-into-separate-rows
(如果有帮助,请点击链接并投票)
rows = []
for i, row in df.iterrows():
for a in row.A:
rows.append([a, row.B])
pd.DataFrame(rows, columns=df.columns)
Timings
Method 4(亚历山大的)是最好的,其次是Method 3