在pandas DataFrame

时间:2016-11-28 02:11:09

标签: python pandas dataframe max

我试图设置pandas DataFrame列的最大值。例如:

my_dict = {'a':[10,12,15,17,19,20]}
df = pd.DataFrame(my_dict)

df['a'].set_max(15)

会产生:

    a
0   10
1   12
2   15
3   15
4   15
5   15

但它没有。

找到最大值有一百万个解决方案,但设置最大值...至少我能找到的。

我可以遍历列表,但我怀疑有更快的方法来完成大熊猫。我的列表会显着更长,因此我希望迭代需要相对较长的时间。此外,我希望能够处理NaN的任何解决方案。

3 个答案:

答案 0 :(得分:18)

我想你可以这样做:

maxVal = 15
df['a'].where(df['a'] <= maxVal, maxVal)      # where replace values with other when the 
                                              # condition is not satisfied

#0    10
#1    12
#2    15
#3    15
#4    15
#5    15
#Name: a, dtype: int64

或者:

df['a'][df['a'] >= maxVal] = maxVal

答案 1 :(得分:15)

您可以使用clip

应用于数据框的所有列:

df.clip(upper=15)

否则应用于所选列here

df.clip(upper=pd.Series({'a': 15}), axis=1)

答案 2 :(得分:4)

从v0.21开始,您可以使用DataFrame.clip_upper

df.clip_upper(15)

    a
0  10
1  12
2  15
3  15
4  15
5  15

同样,如果只想设置下限,请使用DataFrame.clip_lower。这些方法也可以在Series个对象上使用。