python – 具有非唯一标签的两个pandas系列上的操作行为是什么?
发布时间:2020-12-20 13:16:37 所属栏目:Python 来源:网络整理
导读:基本行为是它尝试将值与同一标签配对.如果没有找到标签,则指定NaN.如果标签在左侧或右侧(但不是两者)都是非唯一的,那么它将耗尽所有可能性.例如, pd.Series((2,3),("a","b")) * pd.Series((5,7),("b","b")) 回报 a NaNb 15.0b 21.0 和 pd.Series((2,"b")) 回
基本行为是它尝试将值与同一标签配对.如果没有找到标签,则指定NaN.如果标签在左侧或右侧(但不是两者)都是非唯一的,那么它将耗尽所有可能性.例如,
pd.Series((2,3),("a","b")) * pd.Series((5,7),("b","b")) 回报 a NaN b 15.0 b 21.0 和 pd.Series((2,"b")) 回报 a NaN b 14.0 b 21.0 但是,例如,如果标签在左侧和右侧是非唯一的 pd.Series((2,"b")) 你得到 b 10 b 21 我宁愿期望它耗尽所有可能性,即返回 b 10 b 14 b 15 b 21 什么是确定它返回的值子集?它是基于行顺序吗?如果是这样,这种行为的理由是什么? 谢谢. 解决方法
这是一个有趣的观察:
In [146]: a Out[146]: b 2 b 3 a 4 dtype: int64 In [147]: b Out[147]: a 2 b 5 b 7 dtype: int64 指标: In [148]: a.index Out[148]: Index(['b','b','a'],dtype='object') In [149]: b.index Out[149]: Index(['a','b'],dtype='object') 使用不同索引的乘法: In [150]: a * b Out[150]: a 8 b 10 b 14 b 15 b 21 dtype: int64 但如果索引相同: In [151]: a.sort_index() * b Out[151]: a 8 b 10 b 21 dtype: int64 In [155]: (a.sort_index().index == b.index).all() Out[155]: True DataFrame.join()将根据您的意愿加入重复项: In [128]: a = pd.Series((2,"b")) In [129]: b = pd.Series((5,"b")) In [130]: a.to_frame('a').join(b.to_frame('b')).eval("a * b") Out[130]: b 10 b 14 b 15 b 21 dtype: int64 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |