正如问题所指出的,我正在尝试学习如何在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)
答案 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