gpt4 book ai didi

python - [Pandas]根据if语句分配新列的方式

转载 作者:行者123 更新时间:2023-12-01 03:39:03 24 4
gpt4 key购买 nike

我知道分配可以帮助基于 lambda 函数创建/更改一列,如下所示:

df.assign(c = lambda x: x.sum())

但是,如果我想让语句内联而不是在操作之外单独执行,我找不到使用 if 语句执行此操作的方法。

是否可以在不执行操作之外的任何其他操作的情况下实现这一点:

df.assign(c = lambda x: x.num_col.sum() if x.num_col > 0)

上述命令返回“SyntaxError:无效语法”

最佳答案

IIUC 你可以这样做:

数据:

In [6]: df = pd.DataFrame(np.random.randn(10,2),columns=list('ab'))

In [7]: df
Out[7]:
a b
0 0.493970 1.095644
1 0.128510 -0.542144
2 0.136247 -0.544499
3 -0.540835 -0.100574
4 0.052725 -0.164856
5 -1.201619 1.578153
6 1.921872 0.505875
7 -2.519725 0.282050
8 -1.581868 -0.240352
9 -0.071207 -1.366953

In [8]: df.iloc[:6]
Out[8]:
a b
0 0.493970 1.095644
1 0.128510 -0.542144
2 0.136247 -0.544499
3 -0.540835 -0.100574
4 0.052725 -0.164856
5 -1.201619 1.578153
6 1.921872 0.505875

让我们在索引的a 列中查找正值的总和:[0:6]:

In [9]: df.iloc[:6].query('a > 0').a.sum()
Out[9]: 2.733322288547374

解决方案:

In [10]: df.iloc[:6].assign(c=lambda x: x.query('a > 0').a.sum())
Out[10]:
a b c
0 0.493970 1.095644 2.733322
1 0.128510 -0.542144 2.733322
2 0.136247 -0.544499 2.733322
3 -0.540835 -0.100574 2.733322
4 0.052725 -0.164856 2.733322
5 -1.201619 1.578153 2.733322
6 1.921872 0.505875 2.733322

与重命名的列相同:

In [11]: df.iloc[:6].rename(columns={'a':'AAA', 'b':'BBB'}).assign(c=lambda x: x.query('AAA > 0').AAA.sum())
Out[11]:
AAA BBB c
0 0.493970 1.095644 2.733322
1 0.128510 -0.542144 2.733322
2 0.136247 -0.544499 2.733322
3 -0.540835 -0.100574 2.733322
4 0.052725 -0.164856 2.733322
5 -1.201619 1.578153 2.733322
6 1.921872 0.505875 2.733322
<小时/>

更新:从 Pandas 0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers 开始。

关于python - [Pandas]根据if语句分配新列的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com