Pandas:将两列中的行与多个正则表达式进行比较,并将正确的行复制到自己的列中



我想为我的问题寻求帮助。所以,我有一个两列的数据帧,并且有一个大约 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

最新更新