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 | 必需参数。应用于 接受 并返回可迭代对象、 单一值、 |
axis | int 或 str | 默认为 。定义函数应用的方向。
表示按列应用,
表示按行应用。 |
raw | bool | 默认为 ,传递给 可以提高性能。 |
result_type | str | 默认为 控制输出类型。可选值为
、 |
args | tuple | 默认为空元组 。额外的位置参数元组,将传递给 |
kwargs | dict | 默认为空字典 。额外的关键字参数,将传递给 |
参考文档:Python pandas.DataFrame.apply函数方法的使用
5、pd.crosstab()
pd.crosstab() 是 Pandas 库中的一个函数,常用于生成交叉表(也称为列联表或透视表),它可以展示两个或多个变量之间的频率分布。这个函数非常有用,特别是在数据分析和统计分析中,用来观察不同变量之间的关系。
参数名 | 描述及类型 |
index | 必须。用于在交叉表的行中分组的键, 通常是数组或 |
columns | 必须。用于在交叉表的列中分组的键, 通常是数组或 |
values | 可选,默认 用于聚合的数组或Series, 需要与 |
aggfunc | 可选,默认 values 的函数,如 |
margins | 布尔,默认 是否添加行/列边距(小计), 显示每行/列的总计以及总的总计。 |
margins_name | 字符串,默认 "All"。当
边距的列/行的名称。 |
normalize | 字符串/布尔,默认 是否将频率表规范化, 可选 |
dropna | 布尔,默认 是否在构建交叉表时忽略带有 NaN 值的键。 |
rownames | 已弃用 。自定义行的名字 (在新版本中可能已被弃用)。 |
colnames | 已弃用 。自定义列的名字 (在新版本中可能已被弃用)。 |