>我有一个形式的熊猫数据帧:
col1 | col2 | col3 |
1 dog$cat 73
2 Inherited pig/dog 21
3 Inherited cat 99
4 Inherited weasel$dog 33
我想要的是从 col2 中删除Inherited
,因为它只是一个无关紧要的工件,并在美元符号处破坏其余元素。例如,应将包含dog$cat
的行复制到仅包含dog
的行和仅包含cat
的行中。对于上述情况,所需的结果为:
col1 | col2 | col3 |
1 dog 73
1 cat 73
2 pig/dog 21
3 cat 99
4 weasel 33
4 dog 33
如何快速完成此操作?
使用pandas.Series.str.replace
和split
,然后执行pandas.DataFrame.explode
:
df['col2'] = df['col2'].str.replace('Inherited ', '', regex=True).str.split('$')
new_df = df.explode('col2')
print(new_df)
输出:
col1 col2 col3
0 1 dog 73
0 1 cat 73
1 2 pig/dog 21
2 3 cat 99
3 4 weasel 33
3 4 dog 33
Alternative.
df2 = df.pop('col2')
df.join(pd.DataFrame(df2.str.replace('Inherited','').str.split(r'[$/]').tolist())).set_index(['col1','col3']).stack().reset_index(name='col2').drop('level_2',axis=1)
输出
col1 col3 col2
0 1 73 dog
1 1 73 cat
2 2 21 pig
3 2 21 dog
4 3 99 cat
5 4 33 weasel
6 4 33 dog