pandas 获得两列或多列的逐行最小值

Posted

技术标签:

【中文标题】pandas 获得两列或多列的逐行最小值【英文标题】:pandas get the row-wise minimum value of two or more columns 【发布时间】:2020-09-08 09:49:41 【问题描述】:

如何将两个数据帧的最小值作为 pandas 数据帧方程的一部分引用?我尝试使用不起作用的 python min() 函数。如果这在某处有详细记录,我很抱歉,但我无法找到解决此问题的有效解决方案。我正在寻找类似的东西:

data['eff'] = pd.DataFrame([data['flow_h'], data['flow_c']]).min() *Cp* (data[' Thi'] - data[' Tci'])

我也尝试过使用 pandas min() 函数,也不起作用。

min_flow = pd.DataFrame([data['flow_h'], data['flow_c']]).min()

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

我被这个错误弄糊涂了。数据列只是数字和名称,我不确定索引在哪里起作用。

import pandas as pd
import numpy as np

np.random.seed(365)
rows = 10
flow = 'flow_c': [np.random.randint(100) for _ in range(rows)],
        'flow_d': [np.random.randint(100) for _ in range(rows)],
        'flow_h': [np.random.randint(100) for _ in range(rows)]
data = pd.DataFrame(flow)

# display(data)
   flow_c  flow_d  flow_h
0      82      36      43
1      52      48      12
2      33      28      77
3      91      99      11
4      44      95      27
5       5      94      64
6      98       3      88
7      73      39      92
8      26      39      62
9      56      74      50

【问题讨论】:

【参考方案1】:

如果您尝试获取两列或多列的逐行mininum,请使用pandas.DataFrame.min 并指定axis=1

data['min_c_h'] = data[['flow_h','flow_c']].min(axis=1)

# display(data)
   flow_c  flow_d  flow_h  min_c_h
0      82      36      43       43
1      52      48      12       12
2      33      28      77       33
3      91      99      11       11
4      44      95      27       27
5       5      94      64        5
6      98       3      88       88
7      73      39      92       73
8      26      39      62       26
9      56      74      50       50

【讨论】:

这很好用,但我得到一个 SettingWithCopyWarning...你能更新答案以避免这种情况吗?【参考方案2】:

如果您想获得多列的单个最小值:

data[['flow_h','flow_c']].min().min()

第一个“min()”计算每列的最小值并返回一个熊猫系列。第二个“min”返回每列最小值中的最小值。

【讨论】:

以上是关于pandas 获得两列或多列的逐行最小值的主要内容,如果未能解决你的问题,请参考以下文章

在多列上获取最小值

pandas使用dataframe中的两列时间对象数据列作差生成时间差数据列使用max函数min函数mean函数获取时间差(timedelta对象)的最大值最小值平均值

Pandas DataFrame:如何在行和列范围内获得最小值

如何有效地过滤由两列groupby操作获得的数据帧,以仅包含第二个索引的最大值和最小值?

如何在不创建临时列的情况下从 pandas 数据框列计算最小值?

Pandas 跨行的最小值和最大值