python - 将 lambda 应用于数据框:与 > 运算符一起使用,但使用 == 时出错?
问题描述
我正在尝试从在特定列中具有多个唯一值的组对象中替换组。此行有效,并替换列中具有 >1 个唯一值的组:
df.groupby(['ID'])\
.apply(lambda group: group if len(set(group['col_name'])) > 1 else np.NaN)
但是,如果我只是将 lambda 中的运算符更改为==
(or <=
),它将失败:
df.groupby(['ID'])\
.apply(lambda group: group if len(set(group['col_name'])) == 1 else np.NaN)
导致:
AttributeError: 'float' object has no attribute '_get_axis'
我无法将此错误连接到我的实现,我尝试将 1 转换为浮点数无济于事。
如果有更好的方法来完成同样的任务,那也会有所帮助。
解决方案
我相信您可以将SeriesGroupBy.nunique
withtransform
用于与Series
原始列相同的列,因此可以通过以下方式比较和替换值where
:
df = pd.DataFrame({
'col_name':list('abcdef'),
'ID':list('aaabbc')
})
df['col_name'] = df['col_name'].where(df.groupby('ID')['col_name'].transform('nunique') > 1)
另一个解决方案numpy.where
:
m = df.groupby('ID')['col_name'].transform('nunique') > 1
df['col_name'] = np.where(m, df['col_name'], np.nan)
print (df)
col_name ID
0 a a
1 b a
2 c a
3 d b
4 e b
5 NaN c
推荐阅读
- node.js - 如何在nodejs的导航栏上显示当前用户名
- python - 点列表中坐标的哪个轴[NumPy]
- python - 在 OpenCV 中设置帧位置永远不会起作用
- python - 将来自单个观察的患者内部数据写入多个文本文件
- onlyoffice - OnlyOffice转换api不断返回-1
- javascript - 未捕获的类型错误:无法读取未定义的属性“播放”
- javascript - 拒绝和终止对外部事件的承诺
- c++ - 同一对象中的 QTcpSocket 到 QTcpSocket
- mysql - Mysql2::Error: 键 'PRIMARY' 的重复条目 '32012'
- octobercms - OctoberCMS:如何从 Twig 调用 Storage::url()?