求sql语句 将某列中的正数保持不变,负数取反成为正数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求sql语句 将某列中的正数保持不变,负数取反成为正数相关的知识,希望对你有一定的参考价值。
求sql语句 将某列中的正数保持不变,负数取反成为正数
参考技术A select ABS(列名)from 表本回答被提问者和网友采纳将某列中某行的值与其他列中的值进行比较
【中文标题】将某列中某行的值与其他列中的值进行比较【英文标题】:Comparing the value of a row in a certain column to the values in other columns 【发布时间】:2018-09-12 04:15:35 【问题描述】:使用熊猫
我正在尝试确定某一行中的值是否大于同一行中所有其他列中的值。 为此,我遍历数据框的行并使用“all”函数比较其他列中的值;但似乎这会引发错误“字符串索引必须是整数”
这似乎应该可行:这种方法有什么问题?
for row in dataframe:
if all (i < row['col1'] for i in [row['col2'], row['col3'], row['col4'], row['col5']]):
row['newcol'] = 'value'
【问题讨论】:
迭代数据框对象与迭代其列标题相同。您可能想查看df.iterrows()
方法。
【参考方案1】:
在我看来,主要问题是使用循环来实现可向量化逻辑。
以下是如何使用numpy.where
实现您的逻辑的示例。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 9, (5, 10)))
df['new_col'] = np.where(df[1] > df.max(axis=1),
'col1_is_max',
'col1_not_max')
结果:
0 1 2 3 4 5 6 7 8 9 new_col
0 4 1 3 8 3 2 5 1 1 2 col1_not_max
1 2 7 1 2 5 3 5 1 8 5 col1_is_max
2 1 8 2 5 7 4 0 3 6 3 col1_is_max
3 6 4 2 1 7 2 0 8 3 2 col1_not_max
4 0 1 3 3 0 3 7 4 4 1 col1_not_max
【讨论】:
【参考方案2】:构建一个掩码并将其传递给loc
:
df.loc[df['col1'] > df.loc[:, 'col2':'col5'].max(axis=1), 'newcol'] = 'newvalue'
【讨论】:
非常聪明。非常感谢 有没有办法将此方法用于不正确的列,例如 df.loc[:, ('col1', 'col3':'col5')] ;或者这行不通?谢谢 @SAtt 除非您重新排序列,否则它不会起作用。否则,明确列出列表中的每个列名。 您是如何如此迅速地得出这个答案的?谢谢。 @SAtt 不客气……我已经与 pandas 合作了大约 8 个月……我的个人资料显示,我回答的这类问题比我应得的要多;) ,所以我对常见的开发问题和陷阱有一个想法——这让我可以更有效地为像你这样的用户提供帮助。我邀请你也这样做,这是一个很棒的社区,你会学到很多东西——当然这值得你花时间。祝你好运!以上是关于求sql语句 将某列中的正数保持不变,负数取反成为正数的主要内容,如果未能解决你的问题,请参考以下文章