【问题标题】:Pandas when several columns meet a condition, assign value当几列满足条件时,熊猫分配值
【发布时间】:2020-11-23 19:48:51
【问题描述】:

用例如下:如果在 Pandas Dataframe 中,有几列大于零,我想创建一个值为1 的新列,如果相同的列是负数,我希望设置-1 ,否则我希望设置0

现在,我想扩展以前的。假设我想检查4 列的条件,但如果其中三个条件成立,我仍然希望分配相应的值。下面是一个例子。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    [
        [1, 2, 3, 4, 5],
        [-1, -2, -3, -4, -5],
        [1, 2, -1, -2, -3],
        [1, 2, 3, -1, -2]
    ]
    , columns=list('ABCDE'))


def f(df):
    dst = pd.Series(np.zeros(df.shape[0], dtype=int))
    dst[(df < 0).all(1)] = -1
    dst[(df > 0).all(1)] = 1
    return dst

columns = ['A', 'B', 'C', 'D']

df['dst'] = f(df[columns])

     

上面的代码将返回以下DataFrame:

   A  B  C  D  E  dst
0  1  2  3  4  5    1
1 -1 -2 -3 -4 -5   -1
2  1  2 -1 -2 -3    0
3  1  2  3 -1 -2    0

预期的行为是什么:

  1. 对于行0dst 应该是1,因为AD 保持肯定条件。
  2. 对于行1dst 应该是-1,因为AD 保持否定条件。
  3. 对于行2dst 应为0,因为AD 不满足任何条件。
  4. 对于行3dst 应为1,因为AC 持有肯定条件,只有D 不持有。

【问题讨论】:

标签: python pandas numpy dataframe


【解决方案1】:

您可以将 loc() 方法与 padas DataFrame 对象一起使用。像这样:

input_df.loc[conditions[0], dst_col] = choices[0]
input_df.loc[conditions[1], dst_col] = choices[1]

这将基本上按两个条件过滤input_df,并为其分配正确的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2020-05-16
    • 2016-08-22
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多