【问题标题】:how to get the minimum increase in a table Pandas?如何获得熊猫表中的最小增量?
【发布时间】:2019-01-31 07:23:36
【问题描述】:

我试图在我的表中的列中获得最小的增加。

我目前的尝试

import pandas as pd

df = pd.DataFrame({'A': [0, 100, 50, 100],
                   'B': [5, 2, 2, 0],
                   'C': [10, 20, 40, 400]})

def lowestIncrease(data, value):
  table = data[value].pct_change().fillna(0)
  x = data[value][table == table.min(i for i in table if i > 0)].index[0]
  if x == 0:
    print( 0 )
  else:
    answer = data[value][x] - data[value][x-1]
    print( answer )

我的想法是使用min(),就像我来自这里的方式https://stackoverflow.com/a/27966830/8705615

我想要的输出

in[1]:lowestIncrease(df, 'A')
out[1]:50
in[2]:lowestIncrease(df, 'B')
out[2]:0
in[3]:lowestIncrease(df, 'C')
out[3]:10

我觉得我已经接近我想要实现的目标,我只需要替换我调用table.min(i for i in table if i > 0) 的方式即可获得我想要的输出。如何获得表中大于 0 的值的最小变化?

【问题讨论】:

  • 这应该是不是负数的最小增量吗?
  • 是的,不是负数的最小增量。如果没有正增长,它应该返回 0

标签: python python-3.x pandas


【解决方案1】:

输入:

df = pd.DataFrame({'A': [0, 100, 50, 100],
                   'B': [5, 2, 2, 0],
                   'C': [10, 20, 40, 400]})

解决方案:

df.diff()[df.diff() >0].min().fillna(0)

输出

A    50.0
B     0.0
C    10.0

对于单列

d = df[['A']]
d.diff()[d.diff() >0].min().fillna(0)

输出

A    50.0

【讨论】:

  • 如果我将.fillna(0) 留在其中,我的代码会崩溃,但如果我删除它,它会起作用。但是'B'返回nan
  • 如果我完全按照您的帖子运行,它可以工作,但我试图为各个列提供代码,所以我将df 更改为df[column_name]。如果我这样运行它会崩溃,但它看起来不应该。
  • 对于只想要该值的任何人,我不得不为 float() 中的单个列敲击整个第二行
  • 或者你可以添加 .values[0]
猜你喜欢
  • 2022-11-16
  • 2020-03-26
  • 1970-01-01
  • 2021-02-24
  • 2022-01-05
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多