Pandas Dataframe 行的Map

w41d8nur  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(133)

我有以下名为df的 Dataframe 。
| 标识符|字母|
| - -|- -|
| 一个|x、y轴|
| 2个|Z轴|
| 三个|一种|
Map条件为{'x':1,“z”:2,“其他”:0个字符}
我想要的输出 Dataframe 应该看起来像这样,
| 标识符|字母|Map|
| - -|- -|- -|
| 一个|x、y轴|一个|
| 2个|Z轴|2个|
| 2个|一种|第0页|
这意味着,即使letter列中的任何一个字母是x,那么map列也应该是1。
如果不对 Dataframe 的每一行进行迭代,有什么方法可以做到这一点吗?

mrwjdhj3

mrwjdhj31#

您可以使用

纯洁的Pandas
cond = {'x' : 1, 'z' : 2, 'ELSE' : 0}

df['map'] = (df['letter']
 .str.split(',').explode()
 .map(lambda x: cond.get(x, cond['ELSE']))
 .groupby(level=0).max()
)

在多个值的情况下,我会得到最大值。
第一个有效匹配的备选项:

df['map'] = (df['letter']
 .str.split(',').explode()
 .map(cond)
 .groupby(level=0).first()
 .fillna(cond['ELSE'], downcast='infer')
)
列表理解

或者使用列表解析,这里将使用第一个有效匹配:
第一次

p1tboqfb

p1tboqfb2#

使用np.select

import numpy as np

cond1 = df['letter'].str.contains('x')
cond2 = df['letter'].str.contains('z')
df.assign(map=np.select([cond1, cond2], [1, 2], 0))

输出:

id  letter  map
0   1   x,y     1
1   2   z       2
2   3   a       0

相关问题