我的数据框为:
data = pd.DataFrame([[1,25,'Type 1'],[2,32,'Type 2'],[1,30,'Type 3'],[2,32,'Type 1'],[3,43,'Type1|Type2']], columns = ['data1','data2','Type'])
data1 data2 Type
0 1 25 Type 1
1 2 32 Type 2
2 1 30 Type 3
3 2 32 Type 1
4 3 43 Type 1|Type 2
我只想将Type in Type列作为一个值(不能为Type1 | Type2)。对于具有两个值的值,它们将被拆分,而其他列的值将被复制为新行。预期的数据帧如下:
data1 data2 Type
0 1 25 Type 1
1 2 32 Type 2
2 1 30 Type 3
3 2 32 Type 1
4 3 43 Type 1
5 3 43 Type 2
根据其他帖子,我可以按照以下步骤进行操作:
from itertools import chain
split_type = data['Type'].str.split('|')
data2 = pd.DataFrame({'data1': data['data1'].values.repeat(split_type.str.len()),'data2':data['data2'].values.repeat(split_type.str.len()),'Type': list(chain.from_iterable(split_type.tolist()))})
我得到了预期的结果。但是,如果我有很多列(而不是只有data1,data2和Type作为列),则这样做效率不高。有什么方法可以使我不必为每列做类似的事情('data1':data ['data1']。values.repeat(split_type.str.len())'),从而提高效率。谢谢。