我有一个dataframe(~100万行),它有一个列('product'),其中包含诸如'none'、'q1'、'q123'或'q12_A123'之类的字符串。
我想提取字母“q”后面的数字,并将其输入到另一列(“amountpaid”)中,使其看起来如下所示:

'Product'    'AmountPaid'
 none            0
 q1              1
 q123            123
 q12_a123        12

到目前为止,我已经:
for i in range(0,1000000):
   if 'q' not in df.loc[i,'Product']:
      df.loc[i,'AmountPaid']=0
   else:
      # set 'AmountPaid' to the number following 'q'

问题:
如何提取紧跟在字母“q”后面的数字,但不一定是其后的所有数字?例如,从“q12_a123”中提取12。
大多数“amountpaid”项将设置为0。有没有比上面的for循环和if/else语句更有效的方法?

最佳答案

你在寻找str.extract并在角色'q'后面寻找。

df['AmountPaid'] = df.Product.str.extract(
      r'(?<=q)(\d+)', expand=False
).fillna(0).astype(int)

df

    Product  AmountPaid
0      none           0
1        q1           1
2      q123         123
3  q12_a123          12

07-28 13:36