我正在开发一个代码,根据某些列中的数据为用户分配代码。我使用了pandas数据帧。我用一个初始值填充标记列没有问题,但如果一个人应该有多个标记,我无法弄清楚如何附加到初始值。
数据框将每个单元格视为一个字符串,非常确定我希望它是一个列表。
df["Shopify Tags"] = ''
df.set_index(ID, inplace=True)
i = 0
for index, row in df.iterrows():
if "Medical" in df.iloc[i,2]:
df.iloc[i,4] = "#Medical"
if "40" in df.iloc[i,2]:
df.iloc[i,4].append('#Discount40')
i+=1
我希望Shopify标签列最终看起来像每行#Medical, #Discount40, #OtherTags
这是我关于SO的第一个问题:)
答案 0 :(得分:2)
您的问题值得注意2点:
for
循环的方法。注意到这些要点后,下面是一个解决方案。
# example dataframe
df = pd.DataFrame({'col1': 1,
'col2': ['Medical 1234', 'Medical 40 Something',
'40 something', 'Nothing'],
'col3': 3})
# define function which creates a list from a dictionary mapping
def lister(x):
mapping = {'Medical': '#Medical', '40': '#Discount40'}
return [v for k, v in mapping.items() if k in x]
# apply function to series
df['col4'] = df['col2'].apply(lister)
print(df)
col1 col2 col3 col4
0 1 Medical 1234 3 [#Medical]
1 1 Medical 40 Something 3 [#Medical, #Discount40]
2 1 40 something 3 [#Discount40]
3 1 Nothing 3