numpy python pandas np.where value from another column

rm5edbpk  于 2023-08-05  发布在  Python
关注(0)|答案(2)|浏览(106)

我尝试将不同的值应用于另一列的df,使用:

df['url']= 
     np.where(df['client'] == 'xyz',
     "/s?k={query}&s=relevanceblender&page=%s".format(query=df['keyword']), 
     "other")

字符串
但是query被df['keyword']的所有值替换,而不仅仅是有问题的行。谢谢您的帮助。

x3naxklr

x3naxklr1#

假设此输入:

df = pd.DataFrame({'client': ['abc', 'abc', 'xyz', 'xyz'],
                   'keyword': ['kw1', 'kw2', 'kw3', 'kw4']
                  })

字符串
您可以用途:

df['url'] = np.where(df['client'] == 'xyz',
                     df['keyword'].apply("/s?k={}&s=relevanceblender&page=%s".format),
                     'other')

  • 请注意{query}是如何更改为{}的。*

或者,如果无法更改格式字符串:

df['url'] = np.where(df['client'] == 'xyz',
                     df['keyword'].apply(lambda x: "/s?k={query}&s=relevanceblender&page=%s".format(query=x)),
                     'other')


输出量:

client keyword                                  url
0    abc     kw1                                other
1    abc     kw2                                other
2    xyz     kw3  /s?k=kw3&s=relevanceblender&page=%s
3    xyz     kw4  /s?k=kw4&s=relevanceblender&page=%s

dsekswqp

dsekswqp2#

其中一种方法是向量化"...".format,如下所示:

df = pd.DataFrame({
    'A': [1,2,3,4],
    'B': [*'abcd']
})

query_format = np.vectorize('Item {query!r} for {data!r}'.format)

df['C'] = np.where(df['A'] > 2, query_format(query=df['B'], data=df['A']), 'other')

print(df)

字符串
其结果是:

A  B               C
0  1  a           other
1  2  b           other
2  3  c  Item 'c' for 3
3  4  d  Item 'd' for 4


如需详细信息,请参阅numpy.vectorize

相关问题