如何根据DataFrame中元素的长度更改列值

时间:2018-08-01 06:43:56

标签: python pandas

伙计们,

由于某些原因,我必须将np.array放入DataFrame的单个列中。看起来是:

A           B        C
1       [1,2]        0
2         [4]        0
3   [1,2,5,6]        0
7     [2,5,6]        0
4         [8]        0

是否有任何方法可以根据B列的长度设置C列而不重复它们?例如。如果length(col.B)== 2或length(col.B)== 4,则C = 1,否则C = -1。然后我期望:

A           B        C
1       [1,2]        1
2         [4]       -1
3   [1,2,5,6]        1
7     [2,5,6]        1
4         [8]       -1

非常感谢。

2 个答案:

答案 0 :(得分:4)

numpy.wherelen的条件使用isin

df['C'] = np.where(df['B'].str.len().isin({2,4}), 1, -1)

print (df)
   A             B  C
0  1        [1, 2]  1
1  2           [4] -1
2  3  [1, 2, 5, 6]  1
3  7     [2, 5, 6] -1
4  4           [8] -1

答案 1 :(得分:0)

使用.apply

df['C']=df.apply(lambda row: 1 if len(row['B'].tolist()) in [2,4] else -1,axis=1)
print(df)

输出:

   A          B  C
0  1      [1,2]  1
1  2        [4] -1
2  3  [1,2,5,6]  1
3  7    [2,5,6] -1
4  4        [8] -1

(如果dataframe元素是字符串,请执行ast.literal_eval