[英]Pandas apply using lambda
我想在导入文件后立即导入文件并创建两个额外的列:
我正在导入的文件具有以下结构:
指数 | 概率模型 |
---|---|
1 | 0.34 |
2 | 0.03 |
3 | 0.14 |
4 | 0.23 |
以下代码有效,但我试图避免它:
df = pd.read_csv(filename)
df['subgroups'] = df['probability_model'].transform(lambda x: pd.qcut(x, 100, duplicates='drop',labels=range(1,101)))
df['groups'] = df['subgroups'].apply(lambda x: 'high' if x>100 else 'medium' if 100>=x>50 else 'low' )
我想做的是类似以下的事情。 第一个分配效果很好,但第二个会引发错误。
df = pd.read_csv(filename)\
.assign(subgroups = lambda x: pd.qcut(x.probability_model, 100, duplicates='drop',labels=range(1,101)))\
.assign(groups = subgroups.apply(lambda x: 'high' if x>100 else 'medium' if 100>=x>50 else 'low')
这里的问题是,第二种assign
方法正在使用df
中仍然不存在的subgroups
列。
您首先需要将subgroups
列分配给df
:
df = pd.read_csv(filename)\
.assign(subgroups = lambda x: pd.qcut(x.probability_model, 100, duplicates='drop',labels=range(1,201)))
现在,您可以再次对groups
列使用assign
。
以下面的 MRE 为例:
In [1648]: df
Out[1648]:
Balances Weight
0 10 7
1 11 15
2 12 30
3 13 20
4 10 15
5 13 20
In [1646]: df.assign(a=df.Balances + df.Weight).assign(b=df.a+df.Weight)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-1646-86bddf31de6d> in <module>
----> 1 df.assign(a=df.Balances + df.Weight).assign(b=df.a+df.Weight)
~/Library/Python/3.8/lib/python/site-packages/pandas/core/generic.py in __getattr__(self, name)
5463 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5464 return self[name]
-> 5465 return object.__getattribute__(self, name)
5466
5467 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'a'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.