按符号断开熊猫行并删除重复元素



>我有一个形式的熊猫数据帧:

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.replacesplit,然后执行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

最新更新