比较列中的字符串并在python中创建新列
我有如下所示的数据帧。我需要将数据框中的列与字符串进行比较,并创建一个新列 数据帧:比较列中的字符串并在python中创建新列,python,python-3.x,pandas,dataframe,jupyter-notebook,Python,Python 3.x,Pandas,Dataframe,Jupyter Notebook,我有如下所示的数据帧。我需要将数据框中的列与字符串进行比较,并创建一个新列 数据帧: col_1 AB_SUMI AK_SUMI SB_LIMA SB_SUMI XY_SUMI 如果“AB”、“AK”和“SB”出现在第1列中,则应使用各自的值创建一个新列,否则列值中应出现“*” 预期产出: col_1 new_col AB_SUMI AB AK_SUMI AK SB_LIMA SB SB_SUMI SB XY_SUMI * 我试过下面的代码,
col_1
AB_SUMI
AK_SUMI
SB_LIMA
SB_SUMI
XY_SUMI
如果“AB”、“AK”和“SB”出现在第1列中,则应使用各自的值创建一个新列,否则列值中应出现“*”
预期产出:
col_1 new_col
AB_SUMI AB
AK_SUMI AK
SB_LIMA SB
SB_SUMI SB
XY_SUMI *
我试过下面的代码,但没有成功
list=['AB','AK','AB']
for item in list:
if df['col1'].str.contains(item).any():
df['new']=item
请在这方面帮助我。提前感谢您可以使用regex
创建的列表
通过加入|
(或
),最后将NaN
替换为:
有趣的方法
L = 'AB AK SB'.split()
c = df.col_1.values.astype(str)
f = lambda x, s : np.core.defchararray.find(x, s) >= 0
df.assign(new=np.stack([f(c, i) for i in L]).astype(object).T.dot(np.reshape(L, (-1, 1)))).replace('', '*')
col_1 new
0 AB_SUMI AB
1 AK_SUMI AK
2 SB_LIMA SB
3 SB_SUMI SB
4 XY_SUMI *
太有创意了!还有一个疑问,如果我想在所有条件下更改新的列值,保持不变,我应该在上面的代码中做什么更改?我不确定是否理解-什么条件?你能解释更多吗?我想更改新的col值和预期输出。我该怎么做?你觉得现有的专栏怎么样?然后使用与答案df['col_1']=df.col_1.str.extract(a,expand=False)相同的方法。fillna('*')
L = 'AB AK SB'.split()
c = df.col_1.values.astype(str)
f = lambda x, s : np.core.defchararray.find(x, s) >= 0
df.assign(new=np.stack([f(c, i) for i in L]).astype(object).T.dot(np.reshape(L, (-1, 1)))).replace('', '*')
col_1 new
0 AB_SUMI AB
1 AK_SUMI AK
2 SB_LIMA SB
3 SB_SUMI SB
4 XY_SUMI *