【问题标题】:Selecting all column names where value is greater than 0选择值大于 0 的所有列名
【发布时间】:2021-11-16 01:53:17
【问题描述】:

我有未定义数量的具有某些值的列。例如,假设有 4 列:[a,b,c,d],并且每个列名都有关联的值,如下所示:

a   b   c   d
0   23  11  0
11  43  33  22
12  0   12  0

我想在d旁边写另一列,它的值大于0的列的最大值,例如: 像这样:

a   b   c   d   e
0   23  11  0   b,c
11  43  33  22  a,b,c,d
12  0   12  0   a,c

我的尝试:

dic2 = {'a':[12,0,23],'b':[21,23,0],'c':[0,22,33],'d':[0,22,0]}
df = pd.DataFrame(dic2)
df[df>0]

这将在任何为零的地方返回 NaN 值,但我不知道如何获取具有这些 NaN 值的列。

【问题讨论】:

  • b 和 c 的值 >0 (23,11),其中最大值为 32?
  • 在您的尝试中,所有行都有 0,不是吗?
  • 列 b 和 c 的值 >0 然后请查看关联列名 a=11 b=32 c=22 d=10 的值
  • 所以在 b 和 c 中, b 具有最大值。这是 32
  • 请查看更新后的请求

标签: python pandas


【解决方案1】:

您可以将更大的值(如0)过滤为布尔数据帧,然后使用DataFrame.dot 与列名进行矩阵乘法,最后通过使用str 索引来删除分隔符:

df['e'] = df.gt(0).dot(df.columns + ',').str[:-1]
print (df)
    a   b   c   d      e
0  12  21   0   0    a,b
1   0  23  22  22  b,c,d
2  23   0  33   0    a,c

【讨论】:

    【解决方案2】:

    您可以创建一个新列并在所有其他列上使用max 函数

    df['D'] = df.max(axis=1)
    

    代码将检查所有列。如果要指定从哪些列中获取最大值,请像这样指定它们

    df['D'] = df[column].max(axis=1)
    

    或列列表

    df['D'] = df[[column1, column2]].max(axis=1)
    

    【讨论】:

    • 不,我需要值大于 0 的列
    • "我想在 d 旁边写另一列,它的值大于 0 的列的最大值" 这段代码正是这样做的
    • "其值大于0"那个部分不存在
    • 如果没有大于 0 的值,你希望它返回什么?因为如果有任何大于 0 的值,它将返回它您不必指定它
    • 让楠说吧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2022-01-14
    • 2022-08-04
    • 2011-11-07
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多