python - 多数据类型pandas Dataframe中的比较操作
问题描述
我有以下熊猫数据框:
df = pd.DataFrame({'a': [1, 2.5, 3, 'bad', 5],
'b': [0.1, 'good', 0.3, "ugly", 0.5],
'item': ['a', 'b', 'c', 'd', 'e']})
df = df.set_index('item')
如您所见,这些列具有数字和字符值的组合。我想根据范围更改数值的值,例如:
0 < value <= 1, 应该换成“好”
1 < value <= 2,应该换成“bad”
2 < value <= 6,应该换成“丑”
有人能帮助我吗?提前致谢!上面提到的示例数据框由 2 列组成,但在我的实际实验中,我有大约 400 列。谢谢!
解决方案
想法是将所有列转换为数字,将非数字转换为缺失值,因此可以通过掩码进行比较并设置新值numpy.select
:
a = df.apply(pd.to_numeric, errors='coerce')
m1 = (a > 0) & (a <= 1)
m2 = (a > 1) & (a <= 2)
m3 = (a > 2) & (a <= 6)
arr = np.select([m1, m2, m3], ['good','bad','ugly'], default=df)
df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print (df)
a b
item
a good good
b ugly good
c ugly good
d bad ugly
e ugly good
编辑:
df1 = pd.DataFrame({'initial': [0,1,2], 'end': [1, 2, 6], 'stg': ['good', 'bad', 'ugly']})
a = df1.apply(pd.to_numeric, errors='coerce')
m1 = (a > 0) & (a <= 1)
m2 = (a > 1) & (a <= 2)
m3 = (a > 2) & (a <= 6)
arr = np.select([m1, m2, m3], ['good','bad','ugly'], default=df1)
df = pd.DataFrame(arr, index=df1.index, columns=df1.columns)
print (df)
initial end stg
0 0 good good
1 good bad bad
2 bad ugly ugly
推荐阅读
- aws-lambda - 将路径参数传递给 Google 的 Cloud Function 端点
- python - 使用 pyscreenshot 自动截屏
- excel - 基于字体颜色的 VBA 计数值
- python - 在熊猫数据框列中存储不同值的最佳方法?
- image - 如何确定存储大小为 8000 × 3400 像素的未压缩灰度图像所需的字节数?
- python - git-bash.exe 上的 Pipenv 问题
- ruby-on-rails - 在 Rspec 中模拟实例方法
- excel - 检测到不明确的名称 - 轻松修复
- javascript - 如何从 laravel 刀片加载 vuejs 组件?
- asp.net-core - 有没有办法在 Net Core 3.X 应用程序中停用 IIS 集成,而无需从 CreateDefaultBuilder 复制代码