在熊猫数据框中使用最近创建的属性来创建新属性
问题描述:
我正在寻找相当于R的mutate,它允许您在创建它们之后立即引用已定义的变量在相同的mutate调用内。在熊猫数据框中使用最近创建的属性来创建新属性
new_df <- old_df %>%
mutate(new_col = ifelse(something, 0, 1),
newer_col = ifelse(new_col == 0, 'yay', 'nay'))
在python熊猫中寻找等价物。
如果我创建了以下数据框,我想知道是否有一种方法可以使用.assign
来做同样的事情?
dic = {'names': ['jeff', 'alice', 'steph', 'john'],
'numbers':[4, 6, 5, 7]}
df = pd.DataFrame(dic)
df = df.assign(less_than_6 = np.where(df.numbers < 6, 100, 0),
pass_fail = np.where(df.less_than_6 == 100, 'pass', 'fail'))
我能想到的是替代..
df['less_than_6'] = np.where(df.numbers < 6, 100, 0)
df['pass_fail'] = np.where(df.less_than_6 == 100, 'pass', 'fail')
,但不知道是否有办法做到这一点在同一个电话吗?
答
在assign
df.assign(**{'less_than_6' :lambda x : np.where(x['numbers'] < 6, 100, 0)}).assign(**{'pass_fail':lambda x : np.where(x['less_than_6'] == 100, 'pass', 'fail')})
Out[202]:
names numbers less_than_6 pass_fail
0 jeff 4 100 pass
1 alice 6 0 fail
2 steph 5 100 pass
3 john 7 0 fail
+0
真棒,谢谢。你能解释一下'**'在做什么吗? –
+1
@MattW。 **是为kwargs,你可以检查链接https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.assign.html也,https://stackoverflow.com/questions/2921847/什么此结果的星级操作员平均 – Wen
使用字典不起作用。我得到了同样的''DataFrame'对象没有属性'less_than_6',就像我以前一样。谢谢你的尝试,但! –
添加它作为答案 – Wen