我想为我的问题寻求帮助。所以,我有一个两列的数据帧,并且有一个大约 9500~ 行和 2 列的巨大数据集。有时我必须从 A 列中获取一个子集,有时从 B 列中获取 - 具体取决于正则表达式。但我有两个以上(正则表达式(,但它们有点独特。结果应写入具有"正确"值的第三列中。它必须通过正则表达式完成。
我希望我能用这个(小(例子更清楚地说明:
输入:
df = pd.DataFrame({'A': ['No animal', 'No animal', 'Zoo One', 'Zoo Two', 'Me-Lo-N', 'Ap-Pl-E'], 'B': ['EE.Elephant', 'SS.Penguin', 'EE.Elephant', 'SS.Penguin', 'GB One', 'GB Two']})
>>> df
A B
0 No animal EE.Elephant
1 No animal SS.Penguin
2 Zoo One EE.Elephant
3 Zoo Two SS.Penguin
4 Me-Lo-N GB One
5 Ap-Pl-E GB Two
现在我"确定"了几种模式。
如果"A"列- 中的"无动物",无论如何都要从"B"列中取值。
- 如果在"A"列中是"动物园..."在"B"列中,类似于"XX.动物名称",取"A"(动物园...
- 如果在列"A"中类似于"XX-YY-Z",而在"B"列中是"GB ...",则从"A"列中获取值。
输出应如下所示:
A B C
0 No animal EE.Elephant EE.Elephant
1 No animal SS.Penguin SS.Penguin
2 Zoo One EE.Elephant Zoo One
3 Zoo Two SS.Penguin Zoo Two
4 Me-Lo-N GB One Me-Lo-N
5 Ap-Pl-E GB Two Ap-Pl-E
我为他们构建了遵循正则表达式:
- (无动物(
- (\w{2}..*( f.e. 用于 EE。布拉
- (动物园*( f.e. 动物园...
- (\w{2}-.+-.+( f.e. for Me-Lo-N
- (国标+( ...
就是这样。在两列之间比较特定的正则表达式并将答案粘贴到自己的列中的最佳方法是什么?
真的很感激!谢谢!
使用 np.select 和 str.match,如下所示来获得所需的输出。
df['C']=np.select([df.A=='No animal', df.A.str.match('Zoo.*') & df.B.str.match('w{2}[.].'), df.A.str.match('w{2}-.+-.+') & df.B.str.match('GB.+')], [df.B, df.A,df.A])
打印(DF(
输出
A B C
0 No animal EE.Elephant EE.Elephant
1 No animal SS.Penguin SS.Penguin
2 Zoo One EE.Elephant Zoo One
3 Zoo Two SS.Penguin Zoo Two
4 Me-Lo-N GB One Me-Lo-N
5 Ap-Pl-E GB Two Ap-Pl-E