我有一个熊猫数据框,格式为:
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
如何快速执行此操作?
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
替代。
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