python - Pandas - 根据行值有条件地为新列选择数据源列

标签 python pandas

是否有一个 pandas 函数可以根据条件从不同的列中进行选择?这类似于 SQL Select 子句中的 CASE 语句。例如,假设我有以下 DataFrame:

foo = DataFrame(
    [['USA',1,2],
    ['Canada',3,4],
    ['Canada',5,6]], 
    columns = ('Country', 'x', 'y')
)

我想在 Country=='USA' 时从列 'x' 中选择,在 Country=='Canada' 时从列'y' 中选择,结果如下所示:

  Country  x  y  z
0     USA  1  2  1
1  Canada  3  4  4
2  Canada  5  6  6

[3 rows x 4 columns]

最佳答案

使用 DataFrame.whereother 参数和 pandas.concat :

>>> import pandas as pd
>>>
>>> foo = pd.DataFrame([
...     ['USA',1,2],
...     ['Canada',3,4],
...     ['Canada',5,6]
... ], columns=('Country', 'x', 'y'))
>>>
>>> z = foo['x'].where(foo['Country'] == 'USA', foo['y'])
>>> pd.concat([foo['Country'], z], axis=1)
  Country  x
0     USA  1
1  Canada  4
2  Canada  6

如果你想要z作为列名,指定keys:

>>> pd.concat([foo['Country'], z], keys=['Country', 'z'], axis=1)
  Country  z
0     USA  1
1  Canada  4
2  Canada  6

关于python - Pandas - 根据行值有条件地为新列选择数据源列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23934905/

相关文章:

python - 不要删除 groupby 上不存在的索引 - Pandas

Python数据框: Create New Column Conditionally Using If Then Else Logic --> "The truth value of a Series is ambiguous"

python - 根据具有相同索引/列名称的另一个 DataFrame 中的值设置 Pandas DataFrame 中的单元格值

python - 如何使用 tf.estimator 返回预测和标签(使用 predict 或 eval 方法)?

python - 如何将深度嵌套的列表转换为字符串

python - 将用户名和密码存储到字典中?

python - 在 Numpy 日期时间数组中查找唯一日期

python - py2exe 编译错误 : invalid syntax (_socket3. py,第 183 行)

python - 在 scipy 中,为什么 idct(dct(a)) 不等于 a?

python - 使用 StratifiedKFold 创建训练/测试/验证拆分