我正在将代码从R转换为Python,并且正在寻求一些帮助,以使用dfply
语法/管道基于其他列来更改新列
在此示例中,如果col1
为'c',我想从col2
中减去2,否则加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中,我会这样做:
df_new <- df %>%
mutate(newCol = ifelse(col2 == 'c', col1 - 2, col1 + 4))
但是Python似乎不喜欢这样:
new_df = (df >>
mutate(newCol = np.where(X.col2 == 'c', X.col1 - 2, X.col1 + 4)))
我收到“无效的__array_struct__”错误
请注意,这可以正常工作:
new_df = (df >>
mutate(newCol = X.col1 - 2))
答案 0 :(得分:2)
我将使用apply / lambda函数。 X是数据帧行,而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
答案 1 :(得分:0)
这里相当于python的是内联if else
表达式(或ternary operator):
ifelse(col2 == 'c', col1 - 2, col1 + 4)
然后会变成
col1 - 2 if col2 == 'c' else col1 + 4