Python 是一种执行数据分析任务的优秀语言。它提供了大量的类和函数,有助于更轻松地分析和处理数据。在本文中,我们将了解如何将函数应用于Pandas Dataframe 中的每一行。
将函数应用于 Pandas DataFrame 中的每一行
有多种方法可以对 DataFrame 列执行逐元素操作。这里我们讨论一些对 DataFrame 列执行逐元素操作的示例,如下所示。
- 将用户定义函数应用于Pandas DataFrame的每一行
- 将Lambda应用于 DataFrame 的每一行
- 对每一行应用NumPy.sum()
- 使用 Pandas 中的自定义函数规范化 DataFrame 列值
- 将范围生成函数应用于 Pandas 中的 DataFrame 行
可以使用apply()函数将函数应用于给定数据框中的每一行。让我们看看如何完成这项任务。
将用户定义函数应用于 Pandas DataFrame 的每一行
在此示例中,我们定义了一个函数add_values(row),用于计算每行“A”、“B”和“C”列中的值之和。在该main()函数中,根据字典创建一个 DataFrame,然后使用该方法将该函数应用于每一行,从而生成一个包含总和值的新列“add”。然后打印原始和修改后的 DataFrame。apply()
- Python3
import pandas as pd
# Function to add def add_values(row): return row['A'] + row['B'] + row['C']
def main(): # Create a dictionary with three fields each data = { 'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
# Convert the dictionary into DataFrame df = pd.DataFrame(data) print("Original DataFrame:\n", df)
# Apply the user-defined function to every row df['add'] = df.apply(add_values, axis=1)
print('\nAfter Applying Function: ') # Print the new DataFrame print(df)
if __name__ == '__main__': main() |
输出
Original DataFrame: A B C 0 1 4 7 1 2 5 8 2 3 6 9 After Applying Function: A B C add 0 1 4 7 12 1 2 5 8 15 2 3 6 9 18
将 Lambda 应用于 DataFrame 的每一行
在此示例中,我们定义了一个函数add(a, b, c),该函数返回其三个参数的总和。在该main()函数中,从字典创建一个 DataFrame,并使用apply()带有 lambda 函数的方法将新列“add”添加到 DataFrame。lambda 函数将add函数逐个元素应用于每一行的“A”、“B”和“C”列,并在应用函数之前和之后打印生成的 DataFrame。输出演示了将用户定义的函数应用于 DataFrame 的每一行。
- Python3
# Import pandas package import pandas as pd # Function to add
def add(a, b, c): return a + b + c
def main(): # create a dictionary with # three fields each data = { 'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
# Convert the dictionary into DataFrame df = pd.DataFrame(data) print("Original DataFrame:\n", df)
df['add'] = df.apply(lambda row: add(row['A'], row['B'], row['C']), axis=1)
print('\nAfter Applying Function: ') # printing the new dataframe print(df)
if __name__ == '__main__': main() |
输出
Original DataFrame: A B C 0 1 4 7 1 2 5 8 2 3 6 9 After Applying Function: A B C add 0 1 4 7 12 1 2 5 8 15 2 3 6 9 18
对每一行应用 NumPy.sum()
您也可以使用 numpy 函数作为数据框的参数。在此示例中,我们从字典创建一个 DataFrame,然后使用with 方法将 NumPysum函数应用于每一行,从而生成一个新列“add”,其中包含每行值的总和。然后打印原始和修改后的 DataFrame,以演示该函数的应用。apply()axis=1
- Python3
import pandas as pd import numpy as np
def main(): # create a dictionary with # five fields each data = { 'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
# Convert the dictionary into DataFrame df = pd.DataFrame(data) print("Original DataFrame:\n", df)
# applying function to each row in the dataframe # and storing result in a new column df['add'] = df.apply(np.sum, axis=1)
print('\nAfter Applying Function: ') # printing the new dataframe print(df)
if __name__ == '__main__': main() |
输出
Original DataFrame: A B C 0 1 4 7 1 2 5 8 2 3 6 9 After Applying Function: A B C add 0 1 4 7 12 1 2 5 8 15 2 3 6 9 18
使用 Pandas 中的自定义函数规范化 DataFrame 列值
在这里,我们定义了一个normalize函数,该函数接受两个参数并根据它们的平均值和范围计算归一化值。在该main()函数中,从字典创建一个 DataFrame,然后normalize使用带有 lambda 函数的方法将该函数应用于每一行apply()。生成的 DataFrame 包含列“X”中的归一化值,并打印原始和修改后的 DataFrame。
- Python3
# Import pandas package import pandas as pd
def normalize(x, y): x_new = ((x - np.mean([x, y])) / (max(x, y) - min(x, y)))
# print(x_new) return x_new
def main(): # create a dictionary with three fields each data = { 'X': [1, 2, 3], 'Y': [45, 65, 89]}
# Convert the dictionary into DataFrame df = pd.DataFrame(data) print("Original DataFrame:\n", df)
df['X'] = df.apply(lambda row: normalize(row['X'], row['Y']), axis=1)
print('\nNormalized:') print(df)
if __name__ == '__main__': main() |
输出
Original DataFrame: X Y 0 1 45 1 2 65 2 3 89 Normalized: X Y 0 -0.5 45 1 -0.5 65 2 -0.5 89
将范围生成函数应用于 Pandas 中的 DataFrame 行
在此示例中,我们创建了一个函数,用于根据给定的整数输入创建一个范围,以及一个将函数逐个元素应用于 DataFrame 的每一行的函数。在该函数中,DataFrame 是根据字典创建的,然后使用带有 lambda 函数的方法将该函数应用于每一行,从而生成一个新的 DataFrame,其值由相应的范围替换。然后打印原始和修改后的 DataFrame。generate_rangereplacegenerate_rangemain()replaceapply()
- Python3
import pandas as pd import numpy as np
pd.options.mode.chained_assignment = None
# Function to generate range
def generate_range(n):
# printing the range for eg: # input is 67 output is 60-70 n = int(n)
lower_limit = n//10 * 10 upper_limit = lower_limit + 10
return str(str(lower_limit) + '-' + str(upper_limit))
def replace(row): for i, item in enumerate(row):
# updating the value of the row row[i] = generate_range(item) return row
def main(): # create a dictionary with # three fields each data = { 'A': [0, 2, 3], 'B': [4, 15, 6], 'C': [47, 8, 19]}
# Convert the dictionary into DataFrame df = pd.DataFrame(data)
print('Before applying function: ') print(df)
# applying function to each row in # dataframe and storing result in a new column df = df.apply(lambda row: replace(row))
print('After Applying Function: ') # printing the new dataframe print(df)
if __name__ == '__main__': main() |
输出
Before applying function: A B C 0 0 4 47 1 2 15 8 2 3 6 19 After Applying Function: A B C 0 0-10 0-10 40-50 1 0-10 10-20 0-10 2 0-10 0-10 10-20标签:__,教程,函数,df,DataFrame,add,Pandas,row From: https://blog.csdn.net/xt14327/article/details/144120428