假设我有一个包含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']
获取单元格的值但在此示例中我不想迭代行,我只想一次为每一行计算新列。
答案 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