如何访问pandas数据帧中的值而不迭代每一行

时间:2017-03-01 00:35:10

标签: python pandas dataframe

假设我有一个包含1000行和10列的Pandas Dataframe。

有5个整数列标记为i1到i5和5个字符串列。

如何创建一个名为DIFF的新列,定义为

MAX(i1,i2,i3,i4,i5) - MIN(i1,i2,i3,i4,i5)

我在使用Max和Min操作符时遇到了麻烦,因为我没有干净地访问值 - 被Series搞砸了。在我在网上看到的其他例子中,人们正在做

mydf.iloc[x]['SOME_COL'] 

获取单元格的值但在此示例中我不想迭代行,我只想一次为每一行计算新列。

2 个答案:

答案 0 :(得分:1)

假设您的数字列是前5个,您可以使用以下方法获取所需的列:

df.ix[:, 0:5].max(axis=1) - df.ix[:, 0:5].min(axis=1)

答案 1 :(得分:1)

如果您真正感兴趣的是采用数字列的最大 - 最小值,那么您可以figure out which columns are numeric然后对它们执行max - min。像这样:

>> df
   i1  i2  i3  i4  i5 str_col_1 str_col_2
0   1   2   3   4   5         a         b
1   1   2   3   4   5         a         b
2   1   2   3   4   5         a         b
3   1   2   3   4   5         a         b
4   1   2   3   4   5         a         b

>> numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
>> numeric_cols = df.select_dtypes(include=numerics)
>> numeric_cols.max(axis=1) - numeric_cols.min(axis=1)

0    4
1    4
2    4
3    4
4    4
dtype: int64