Python 将字母组合分隔为具有单个字母值的列
使用python 3.8、1.1.4 我有一个像这样的数据框Python 将字母组合分隔为具有单个字母值的列,python,pandas,Python,Pandas,使用python 3.8、1.1.4 我有一个像这样的数据框 id combination 1 'A23B14C02R01D05E03F07G07H01I00J02K11L30' 2 'A11B14C02R01D05E03F07G07H01I00J02K11L30' 3 'A30B14C02R01D05E03F07G07H01I00J02K11L30' ... 我想做的是将组合列分离为多个列,这些列只包含一个字母表 所需的输出应如下所示
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。有没有更节省内存的方法?