从列中提取数据

时间:2019-08-27 04:57:35

标签: python pandas

嗨,我有dataframe,它包含我要创建的第三列的sencod列中的2列

^[-+]?(\d+)(?:[.,]?\d+)?$

如果列包含False,则outout是False,则它从第二列获取每个值。

let nums = ["-1234", "+1232,1232", "+1234.12342,123"]

nums.forEach(num => {
  console.log(/^[-+]?(\d+)(?:[.,]?\d+)?$/.test(num))
})

1 个答案:

答案 0 :(得分:1)

如果按列Index每组具有相同的值,则解决方案有效,因此仅处理每组中列的第一个值。

首先split并过滤掉False值,然后是一般解决方案的3个条件:

def f(x):
    a = [y for y in x.iat[0].split('_') if y != 'False']
    if len(x) == len(a):
        return a
    elif len(x) > len(a):
        return a + ['False'] * (len(x) - len(a))
    elif len(x) < len(a):
        return a[:len(x)]

df1['col3'] = df1.groupby('Index')['col2'].transform(f)
print (df1)
   Index                     col2   col3
0      1              False_False  False
1      2              ab_ba_False     ab
2      2              ab_ba_False     ba
3      3   bca_False_abc_False_cd    bca
4      3   bca_False_abc_False_cd    abc
5      3   bca_False_abc_False_cd     cd
6      4  False_bca_False_abc_cde    bca
7      4  False_bca_False_abc_cde    abc
8      4  False_bca_False_abc_cde    cde
9      5                 as_False     as