Python相当于dplyr的ifels

2024-04-30 02:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将代码从R转换为Python,并希望在基于其他列的基础上使用dfply语法/管道改变新列的帮助

在这个例子中,我想从col1中减去2,如果col2是'c',否则加4

import pandas as pd
import numpy as np
from dfply import *

col1 = [1,2,3,4,5]
col2 = ['a', 'b', 'c', 'd', 'e']

df = pd.DataFrame(data = {'col1': col1, 'col2': col2})

在R我会做:

^{pr2}$

但Python似乎不喜欢这样:

new_df = (df >>
    mutate(newCol = np.where(X.col2 == 'c', X.col1 - 2, X.col1 + 4)))

我得到一个错误“无效的数组结构”

请注意,这很好:

new_df = (df >>
    mutate(newCol = X.col1 - 2))

Tags: 代码importdfnew管道asnp语法
2条回答

我将使用apply/lambda函数。X是dataframe行,axis=1表示对每列应用lambda函数。在

df['newCol'] = df.apply(lambda X: X.col1 - 2 if X.col2 == 'c' else X.col1 + 4, axis=1)
df

  col1 col2 newCol
0   1   a   5
1   2   b   6
2   3   c   1
3   4   d   8
4   5   e   9

这里的python等价物是一个内联if else表达式(或ternary operator):

ifelse(col2 == 'c', col1 - 2, col1 + 4)

就会变成

^{pr2}$

相关问题 更多 >