【问题标题】:mutiples conditions with if on a datraframe python, create function在数据框python上使用if的倍数条件,创建函数
【发布时间】:2019-03-07 12:23:39
【问题描述】:

我有一个包含四列的数据框。

我通常应该有:conso_HC=index_fin_HC-index_debut_HC。但正如你所看到的,情况并非如此,减法实际上等于那个。问题是,如果我们想找到 conso_HC,有时需要将 100000 添加到 index_fin_HCindex_debut_HC 之一。

 x=fichier['index_fin_HC']-fichier['index_debut_HC']
y=fichier['conso_HC']
def conditions(x,y):
    if x+100000==y:
        return x
    elif x==y+100000:
        return y
fichier['test']=fichirt

【问题讨论】:

  • 如果我知道加法是什么,你永远不会通过在 index_debut 的 index_fin 上加 100000 来找到 conso_HC。这些数据来自哪里?
  • 其实问题是,当你达到 100k 时,你有时会在 0 处重新启动,这就是为什么你有时必须添加 100k 来检查是这个问题还是只是一个异常
  • 欢迎使用 SO,请添加预期输入和输出示例。
  • 我只想直接替换列中正确的值

标签: python pandas numpy dataframe


【解决方案1】:

构建一个测试条件的新系列很容易:

>>> (df.soustraction + 100000 == df.conso) | (df.soustraction - 100000 == df.conso)
0    False
1    False
2    False
3    False
4     True
5     True
6    False
dtype: bool

然后你可以:

  1. 将其作为新列添加到数据框中:

    df['condition'] = (df.soustraction + 100000 == df.conso) | (df.soustraction - 100000 == df.conso)
    
  2. 在数据框中选择符合条件的行

    >>> df[(df.soustraction + 100000 == df.conso) | (df.soustraction - 100000 == df.conso)]
         debut     fin    conso  soustraction
    4  99193.0   526.0   1333.0      -98667.0
    5  91833.0  6407.0  14574.0      -85426.0
    
  3. 选择数据框中不符合条件的行

    >>> df[~ ((df.soustraction + 100000 == df.conso) | (df.soustraction - 100000 == df.conso))]
         debut     fin   conso  soustraction
    0  34390.0   414.0   452.0      -33976.0
    1  18117.0    85.0   216.0      -18032.0
    2  37588.0   234.0  8468.0      -37354.0
    3  49060.0    53.0  1399.0      -49007.0
    6  38398.0  1594.0  1994.0      -36804.0
    

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多