![](/img/trans.png)
[英]how do I perform the below python operation in pandas/ dataframe
[英]How do I perform a math operation on a Python Pandas dataframe column, but only if a certain condition is met?
我有一个Pandas数据框,我正在使用它,我只需要将某个列中的所有值除以大于800乘以100.换句话说,如果'credit_score'列中的值大于800,则可以假设数据是在小数点左边的两个额外位置输入的。 例如...
id credit_score column_b column_c
0 750 ... ...
1 653 ... ...
2 741 ... ...
3 65100 ... ...
4 73500 ... ...
5 565 ... ...
6 480 ... ...
7 78900 ... ...
8 699 ... ...
9 71500 ... ...
所以我基本上想把行索引3,4,7和9的信用评分除以100,而不是其他。 我希望新的有效值替换旧的无效值。 或者,像“credit_score_fixed”这样的新列也可以使用。 我是Python和Pandas的新手,所以非常感谢任何帮助。
我使用Pandas布尔索引 :
In [193]: df.loc[df.credit_score > 800, 'credit_score'] /= 100
In [194]: df
Out[194]:
credit_score
id
0 750.0
1 653.0
2 741.0
3 651.0
4 735.0
5 565.0
6 480.0
7 789.0
8 699.0
9 715.0
你可以使用mask
:
df.credit_score = df.credit_score.mask( df.credit_score > 800, df.credit_score/ 100)
或numpy.where
:
df.credit_score = np.where( df.credit_score > 800, df.credit_score/ 100, df.credit_score)
print (df)
id credit_score col col1
0 0 750 750.0 750.0
1 1 653 653.0 653.0
2 2 741 741.0 741.0
3 3 65100 651.0 651.0
4 4 73500 735.0 735.0
5 5 565 565.0 565.0
6 6 480 480.0 480.0
7 7 78900 789.0 789.0
8 8 699 699.0 699.0
9 9 71500 715.0 715.0
您可以使用Series.apply
。 它接受一个函数并将其应用于系列中的每个元素。 请注意,它不在位,您需要将它返回的系列重新分配给新列或同一列。
def fix_scores(score):
return score / 100 if score > 800 else score
# same as
# if score > 800:
# return score / 100
# return score
df['credit_score_fixed'] = df['credit_score'].apply(fix_scores)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.