df1 = df.drop(['不良现象_1'], axis=1).join(df['不良现象_1'].str.split(';', expand=True).stack().reset_index(level=1, drop=True).rename('不良现象_new')) df2 = df.drop(['原因分析_1'], axis=1).join(df['原因分析_1'].str.split(';', expand=True).stack().reset_index(level=1, drop=True).rename('原因分析_new')),上述代码如何修改后,实现两列对应两个新的DateFrame,且拆分后的两列进行单独的堆叠操作,并且最后两列的拼接放在不同的指定位置?
时间: 2023-06-12 10:02:46 浏览: 138
可以将代码修改为以下形式:
```
df1 = df.drop(['不良现象_1'], axis=1).join(df['不良现象_1'].str.split(';', expand=True).stack().reset_index(level=1, drop=True).rename('不良现象_new')).reset_index(drop=True)
df2 = df.drop(['原因分析_1'], axis=1).join(df['原因分析_1'].str.split(';', expand=True).stack().reset_index(level=1, drop=True).rename('原因分析_new')).reset_index(drop=True)
# 对两个新DataFrame进行单独的堆叠操作
df1_stacked = df1.set_index(['列名1', '列名2'])['不良现象_new'].apply(pd.Series).stack().reset_index().drop('level_2', axis=1).rename(columns={0: '新列名'})
df2_stacked = df2.set_index(['列名1', '列名2'])['原因分析_new'].apply(pd.Series).stack().reset_index().drop('level_2', axis=1).rename(columns={0: '新列名'})
# 将两个堆叠后的DataFrame进行拼接,并放在不同的指定位置
merged_df = pd.concat([df1_stacked, df2_stacked], axis=1)
merged_df = merged_df[['列名1', '列名2', '新列名', '新列名']]
```
需要注意的是,`reset_index(drop=True)` 是用来重置索引的,确保两个新的DataFrame的索引是从0开始的。另外,在拆分后的两列进行单独的堆叠操作时,需要指定列名,否则会出现列名重复的情况。最后在拼接时,需要按照指定的顺序将列放置到对应的位置。
阅读全文