gpt4 book ai didi

python - 如果条件为真,如何使用 Pandas (Python) 在列中插入值

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:13 24 4
gpt4 key购买 nike

我有以下数据集,我正在尝试创建一个条件,如果百分比单元格中的值为正,我希望匹配单元格显示后续的百分比值,例如 (i+1)。但是,我想问一下如何在不使用循环的情况下执行此操作。例如,在第 0 行和 Match 中,它会显示值 -0.34。

        User Percent      Match 
0 A 0.87 NaN
1 A -0.34 NaN
2 A 0.71 NaN
3 A -0.58 NaN
4 B -1.67 NaN
5 B -0.44 NaN
6 B -0.72 NaN
7 C 0.19 NaN
8 C 0.39 NaN
9 C -0.28 NaN
10 C 0.53 NaN

此外,我如何才能在百分比单元格中对后续两个值进行正数求和。我有以下代码,但在索引行位置时出错。

df1.ix[df1.Percent >=0, ['Match']] = df1.iloc[:1]['Match']; df1

最佳答案

对于第一部分,您可以使用带有 bool 条件的 locshift :

In [5]:
df.loc[df['Percent']>0,'Match'] = df['Percent'].shift(-1)
df

Out[5]:
User Percent Match
0 A 0.87 -0.34
1 A -0.34 NaN
2 A 0.71 -0.58
3 A -0.58 NaN
4 B -1.67 NaN
5 B -0.44 NaN
6 B -0.72 NaN
7 C 0.19 0.39
8 C 0.39 -0.28
9 C -0.28 NaN
10 C 0.53 NaN

对于求和,您可以执行以下操作:

In [15]:
def func(x):
return df['Percent'].iloc[x.name-2:x.name].sum()
df['sum'] = df[df['Percent']>0][['Percent']].apply(lambda x: func(x), axis=1)
df

Out[15]:
User Percent Match sum
0 A 0.87 -0.34 0.00
1 A -0.34 NaN NaN
2 A 0.71 -0.58 0.53
3 A -0.58 NaN NaN
4 B -1.67 NaN NaN
5 B -0.44 NaN NaN
6 B -0.72 NaN NaN
7 C 0.19 0.39 -1.16
8 C 0.39 -0.28 -0.53
9 C -0.28 NaN NaN
10 C 0.53 NaN 0.11

这使用了一个小技巧来屏蔽 df 并返回感兴趣的 col 但强制返回 df(通过使用双方括号 [[]])所以我们可以调用 apply并使用 axis=1 按行迭代。这允许我们通过 .name 属性访问行索引。然后我们可以使用它来切片 df 并返回 sum

关于python - 如果条件为真,如何使用 Pandas (Python) 在列中插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34968238/

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