涉及Python中DataFrame每一列的函数中的函数

时间:2018-08-13 22:01:35

标签: python pandas function dataframe

正如问题所指出的,我正在尝试学习如何在DataFrame中属于列的每个元素上运行函数,而不必直接定义该列。关键是我希望能够输入DataFrame的任何给定集合,并在满足特定条件的每一列中找到每个元素。

我包含的样本说明了我正在尝试做的事情。我知道以下内容不起作用,而且我认为编写def fun(dataframe[column])可以解决问题,但不幸的是语法不正确。

基本上,原因是我有多组数据,我想在这些数据中找到每个阈值都高于设定阈值的元素。

非常感谢!

df=pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'))
def fun(dataframe):
  for column in dataframe:  
     def fun(column):  
        mean= sum(column)/len(column)
        print (mean)
        for element in column:
            if element < mean*1.1:
                element = 0
            print (element)
fun(df)      

1 个答案:

答案 0 :(得分:1)

正如@MadPhysicist在评论中提到的那样,创建pandas是为了减少对显式循环的需求。

如果我正确理解了您的特定情况,则打算将小于其列平均值的1.1倍的任何元素替换为零。这是在惯用熊猫中做到这一点的一种方法:

# Set a random seed for repeatability
np.random.seed(314159)

# Create example data
df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'))
df
    A   B   C
0  11  34  93
1  79   0  81
2  66  43  71

# By default, df.mean() computes the mean of each numeric column (not row)
df.mean()
A    52.000000
B    25.666667
C    81.666667
dtype: float64

# We can use boolean indexing to replace values less than
# 1.1 * column mean with zero
# docs: https://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing
df[df < 1.1 * df.mean()] = 0

df
    A   B   C
0   0  34  93
1  79   0   0
2  66  43   0