我有一个关于将数据框列中的列表分成多行的问题。
假设我有这个数据框:
Job position Job type id 0 [6] [1] 3 1 [2, 6] [3, 6, 5] 4 2 [1] [9] 43
我想要数字的每个单一组合,因此最终结果将是:
id Job position Job type 0 3 6.0 1.0 1 4 2.0 3.0 2 4 2.0 6.0 3 4 2.0 5.0 4 4 6.0 3.0 5 4 6.0 6.0 6 4 6.0 5.0 7 43 1.0 9.0
因为现在我得到以下结果:
id Job position Job type 0 3 6.0 1.0 1 4 2.0 3.0 2 4 6.0 6.0 3 4 NaN 5.0 4 43 1.0 9.0
为了得到上面的结果,我做了:
df = df.set_index(['id']) (df.apply(lambda x: pd.DataFrame(x.tolist(),index=x.index) .stack() .rename(x.name)).reset_index())
与斯科特·波士顿(Scott Boston)的建议类似,我建议您分别展开各列,然后将它们合并在一起。
例如,对于“职位”:
>>> df['Job position'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index') value index 0 6.0 1 2.0 2 1.0 1 6.0
并且,一起:
df = pd.DataFrame({'Job position': [[6], [2, 6], [1]], 'Job type': [[1], [3, 6, 5], [9]], 'id': [3, 4, 43]}) jobs = df['Job position'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index') types = df['Job type'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index') >>> pd.merge( pd.merge( jobs, types, left_index=True, right_index=True), df[['id']], left_index=True, right_index=True).rename(columns={'value_x': 'Job positions', 'value_y': 'Job type'}) Job positions Job type id 0 6.0 1.0 3 1 2.0 3.0 4 1 2.0 6.0 4 1 2.0 5.0 4 1 6.0 3.0 4 1 6.0 6.0 4 1 6.0 5.0 4 2 1.0 9.0 43