Python 将字母组合分隔为具有单个字母值的列

Python 将字母组合分隔为具有单个字母值的列,python,pandas,Python,Pandas,使用python 3.8、1.1.4 我有一个像这样的数据框 id combination 1 'A23B14C02R01D05E03F07G07H01I00J02K11L30' 2 'A11B14C02R01D05E03F07G07H01I00J02K11L30' 3 'A30B14C02R01D05E03F07G07H01I00J02K11L30' ... 我想做的是将组合列分离为多个列,这些列只包含一个字母表 所需的输出应如下所示

使用python 3.8、1.1.4

我有一个像这样的数据框

id             combination  
1      'A23B14C02R01D05E03F07G07H01I00J02K11L30'
2      'A11B14C02R01D05E03F07G07H01I00J02K11L30'
3      'A30B14C02R01D05E03F07G07H01I00J02K11L30'
...
我想做的是将组合列分离为多个列,这些列只包含一个字母表

所需的输出应如下所示:

id    A     B   C   R    D   E    F    G    H    I    J    K    L
1    23    14   02  01   05  03  07   07   01   00   02    11  30
2    11    14   02  01   05  03  07   07   01   00   02    11  30
3    30    14   02  01   05  03  07   07   01   00   02    11  30
...

提前谢谢

让我们尝试使用
findall
然后
explode
crosstab
作为pivot

s = df.combination.str.findall('([a-zA-Z]+)(\d+)').explode()
df = df.join(pd.crosstab(index=s.index,columns=s.str[0],values=s.str[1],aggfunc='first'))
df
   id                              combination   A   B   C  ...   I   J   K   L   R
0   1  A23B14C02R01D05E03F07G07H01I00J02K11L30  23  14  02  ...  00  02  11  30  01
1   2  A11B14C02R01D05E03F07G07H01I00J02K11L30  11  14  02  ...  00  02  11  30  01
2   3  A30B14C02R01D05E03F07G07H01I00J02K11L30  30  14  02  ...  00  02  11  30  01
[3 rows x 15 columns]

我们可以尝试
extractall
和pivot:

df[['id']].join(df.combination.str.extractall('(\D+)(\d*)')
   .set_index(0, append=True)
   .reset_index('match',drop=True)
   [1].unstack(0)
)
输出:

   id   A   B   C   D   E   F   G   H   I   J   K   L   R
0   1  23  14  02  05  03  07  07  01  00  02  11  30  01
1   2  11  14  02  05  03  07  07  01  00  02  11  30  01
2   3  30  14  02  05  03  07  07  01  00  02  11  30  01

我的组合应该包含字母A-L和R,我怎么能做到
df.composition.str.findall('([a-lA-L或rR]+)(\d+))。explode()
str.findall('([a-L | R]+)(\d+)
这似乎可以完成任务@Ambleu great您发现了它~Hey@BENY您的方法在
MemoryError之前工作得很好。错误:无法为具有形状(268324178)和数据类型object
的数组分配1.02 GiB。有没有更节省内存的方法?