繁体   English   中英

Pandas 申请使用 lambda

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM