我从这篇文章开始: Pandas conditional creation of a series/dataframe column
在我的特定情况下,我的数据如下所示:
Type Set
1 A [1,2,3]
2 B [1,2,3]
3 B [3,2,1]
4 C [2,4,1]
我使用 np.where 借用了这个想法,所以如果我需要根据每个条目中列表中的最后一个元素创建一个新的 col,我写道:
df['color'] = np.where(df['Set'].str(-1)==3, 'green', 'red')
,这会产生:
Set Type color
0 Z [1,2,3] green
1 Z [1,2,3] green
2 X [3,2,1] red
3 Y [2,4,1] red
现在我希望更灵活,想说,如果列表中显示3个,我将分配color=green。我尝试使用 in 或 isin(),它们不适用于 np.where。希望了解我上面有哪些类似格式的其他选项。 (如果可能,不要使用 for 循环)。
The desired output:
Set Type color
0 Z [1,2,3] green
1 Z [1,2,3] green
2 X [3,2,1] green
3 Y [2,4,1] red
答案 0 :(得分:4)
试试 explode
df['new']= np.where(df.Set.explode().eq(3).any(level=0),'green','red')
df
Out[131]:
Type new
0 [1, 2, 3] green
1 [1, 2, 3] green
2 [3, 2, 1] green
3 [2, 4, 1] red
答案 1 :(得分:2)
您也可以转换为字符串并使用 str.contains
:
find=3
df['color'] = np.where(df["Set"].astype(str).str.contains(str(find)),'green','red')
或者使用条件所在的数据框
pd.DataFrame(df["Set"].to_list(),index=df.index).eq(3).any(1)
print(df)
Type Set color
1 A [1, 2, 3] green
2 B [1, 2, 3] green
3 B [3, 2, 1] green
4 C [2, 4, 1] red