Python 映射熊猫系列以列出成员资格
假设我有以下系列,Python 映射熊猫系列以列出成员资格,python,python-3.x,pandas,Python,Python 3.x,Pandas,假设我有以下系列,dtype('O'): 和以下列表(组): 我想将s映射到一个基于组成员身份的新系列,在没有成员身份的情况下填充np.nan。结果: res Out[17]: 0 group1 1 group1 2 group2 3 group2 4 nan dtype: object 我正在寻找一种比使用重复的np更具python风格的方法。其中: res = pd.Series(np.where(s.isin(group1), 'group1',
dtype('O')
:
和以下列表(组):
我想将s
映射到一个基于组成员身份的新系列,在没有成员身份的情况下填充np.nan
。结果:
res
Out[17]:
0 group1
1 group1
2 group2
3 group2
4 nan
dtype: object
我正在寻找一种比使用重复的np更具python风格的方法。其中
:
res = pd.Series(np.where(s.isin(group1), 'group1',
np.where(s.isin(group2), 'group2',
np.where(s.isin(group3), 'group3',
np.nan))))
理想情况下,这意味着要将列表集合指定为单个iterable,因为在我真正的问题中,我有更多的组res
可以是数据类型O
或categorical
我所尝试的:
- 上面的例子使用了
,虽然有效,但过于冗长np.where
- 创建
。卡在那里dict(zip(['group1','group2','group3'],[group1,group2,group3])
注意:组列表总是不相交的。我认为您需要重新构造映射 从您的dict开始(
dict(zip(['group1','group2','group3',[group1,group2,group3]))
):
假设列表不相交,则相反的列表为:
reversed_map = {v: k for k, lst in d.items() for v in lst}
现在,您可以使用地图:
s.map(reversed_map)
Out[19]:
0 group1
1 group1
2 group2
3 group2
4 NaN
dtype: object
我认为您需要重新构建映射 从您的dict开始(
dict(zip(['group1','group2','group3',[group1,group2,group3]))
):
假设列表不相交,则相反的列表为:
reversed_map = {v: k for k, lst in d.items() for v in lst}
现在,您可以使用地图:
s.map(reversed_map)
Out[19]:
0 group1
1 group1
2 group2
3 group2
4 NaN
dtype: object
我之前没有机会回复你的评论。我认为你最好的办法是在开始时构建映射,但我不知道你是如何得到这些列表的。在任何情况下,如果效率是一个问题,请随时接受。如果问题没有解决,人们更有可能研究其他选择。我之前没有机会回复你的评论。我认为你最好的办法是在开始时构建映射,但我不知道你是如何得到这些列表的。在任何情况下,如果效率是一个问题,请随时接受。如果问题没有解决,人们更有可能研究替代方案。
s.map(reversed_map)
Out[19]:
0 group1
1 group1
2 group2
3 group2
4 NaN
dtype: object