嗨,我有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))
})
答案 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