Python Pandas 通过字典计算DataFrame中每行的指定列的最小值

Python中使用pandas库计算DataFrame中每行的指定列的最小值,可以使用一个字典的key来指定行,value指定哪些列需要参与计算。计算结果添加到新的列。

1、计算数据

DataFrame中数据的一列,通过字典中key作为的条件筛选出来,字典中value来指定列名,对于筛选出来的行中的指定的多个列,可以是所有列,也可以部分列,对这些列来计算最小值。

DataFrame数据:

Col0  Col1  Col2  Col3  Col4  Col5
0  Item1    20    89    26    40    55
1  Item2    25    15    30   108     2

条件:

my_dict = {
'Item1':['Col1','Col3'],
'Item2':['Col6','Col4']
}

结果:

Col0  Col1  Col2  Col3  Col4  Col5    min
0  Item1    20    89    26    40    55   20.0
1  Item2    25    15    30   108     2  108.0

说明:

my_dict作为条件,根据字典中的key值对DataFrame数据中的行进行筛选,然后符合条件的行数据,在根据字典中的value中指定的多个列名对应的值,对它们进行最小值的计算。比较适计算指定行的某些列的最小值。

2、通过df.apply()方法实现

apply() 函数是 pandas 中常用的函数之一,可以帮助高效地处理 DataFrame 数据。通过灵活运用 apply() 函数及其搭配的 lambda 函数,可以实现各种数据操作需求。

import pandas as pd
my_dict={'Item1':['Col1','Col3'],
'Item2':['Col2','Col4']
}
df=pd.DataFrame({
'Col0':['Item1','Item2'],
'Col1':[20,25],
'Col2':[89,15],
'Col3':[26,30],
'Col4':[40,108],
'Col5':[55,2]
})
my_dict = {
'Item1': ['Col1', 'Col3'],
'Item2': ['Col2', 'Col4']
}
df['min'] = df.apply(lambda r:r[my_dict.get(r['Col0'], [])].min(), axis=1)
print(df)

3、通过pd.crosstab()方法实现

pd.crosstab()可以在 pandas DataFrame 中有效地分析分类变量之间的关系。d.crosstab() 是一个强大的工具,可用于探索和分析分类数据中的模式和趋势。

import pandas as pd
df=pd.DataFrame({
'Col0':['Item1','Item2'],
'Col1':[20,25],
'Col2':[89,15],
'Col3':[26,30],
'Col4':[40,108],
'Col5':[55,2]
})
my_dict = {
'Item1':['Col1','Col3'],
'Item2':['Col6','Col4']
}
m = pd.crosstab(*(pd.DataFrame(my_dict)
.stack().reset_index(level=1)
.T.to_numpy()))
df['min'] = df.set_index('Col0').where(m.eq(1), float('inf')).min(axis=1).to_list()
print(df)

4、df.apply()

df.apply() 函数是 pandas 库中非常强大的工具,用于在 DataFrame 上应用函数,可以沿指定轴对整个 DataFrame 或其某个子集执行自定义函数。

参数名

类型

描述与默认值

func

function

必需参数。应用于 DataFrame 的函数。

接受 DataFrameSeries

并返回可迭代对象、

单一值、SeriesDataFrame

axis

int 或 str

默认为 0

。定义函数应用的方向。

0'index'

表示按列应用,

1 'columns'

表示按行应用。

raw

bool

默认为 False。如果为 True

,传递给 func 的是 numpy 数组而非 Series。

可以提高性能。

result_type

str

默认为 None

控制输出类型。可选值为

Noneexpand

reducebroadcast

args

tuple

默认为空元组 ()

。额外的位置参数元组,将传递给 func

kwargs

dict

默认为空字典 {}

。额外的关键字参数,将传递给 func

参考文档Python pandas.DataFrame.apply函数方法的使用

5、pd.crosstab()

pd.crosstab() 是 Pandas 库中的一个函数,常用于生成交叉表(也称为列联表或透视表),它可以展示两个或多个变量之间的频率分布。这个函数非常有用,特别是在数据分析和统计分析中,用来观察不同变量之间的关系。

参数名

描述及类型

index

必须。用于在交叉表的行中分组的键,

通常是数组或Series

columns

必须。用于在交叉表的列中分组的键,

通常是数组或Series

values

可选,默认 None

用于聚合的数组或Series,

需要与 aggfunc 配合使用。

aggfunc

可选,默认 None。聚合

values 的函数,如 summean 等。

margins

布尔,默认 False

是否添加行/列边距(小计),

显示每行/列的总计以及总的总计。

margins_name

字符串,默认 "All"。当

margins=True 时,

边距的列/行的名称。

normalize

字符串/布尔,默认 False

是否将频率表规范化,

可选 'all', 'index', 'columns'False

dropna

布尔,默认 True

是否在构建交叉表时忽略带有 NaN 值的键。

rownames

已弃用

。自定义行的名字

(在新版本中可能已被弃用)。

colnames

已弃用

。自定义列的名字

(在新版本中可能已被弃用)。

参考文档:Python Pandas pandas.crosstab函数方法的使用

推荐阅读
cjavapy编程之路首页