【发布时间】:2019-08-22 12:51:04
【问题描述】:
我来自 R 背景,我正在尝试在 pandas 中复制 dplyr 中的 mutate() 函数。
我有一个如下所示的数据框:
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'age': [42, 52, 36, 24, 73],
'preTestScore': [4, 24, 31, 2, 3],
'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])
我现在尝试使用assign 方法创建一个名为age_bracket 的新列,如下所示:
(df.
assign(age_bracket= lambda x: "under 25" if x['age'] < 25 else
("25-34" if x['age'] < 35 else "35+"))
这引发了以下我无法理解的错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我对以下解决方案不感兴趣:
df['age_bracket'] = np.where(df.age < 25, 'under 25',
(np.where(df.age < 35, "25-34", "35+")))
因为我不希望底层 df 改变。我试图在方法链接方面做得更好,我可以在不改变底层 df 的情况下以不同的方式快速探索我的 df。
有什么建议吗?
【问题讨论】:
-
df.assign(age_bracket=np.where(df.age < 25, 'under 25', (np.where(df.age < 35, "25-34", "35+"))))?
标签: python pandas dplyr method-chaining