最小/最大数字和行中的字符串

时间:2018-01-10 21:38:30

标签: python pandas dataframe

我有一个很长的数据集,想要连续获得最小/最大值:

    County   Year1   Year2   Year3   Year4
1   Autauga  54660   55253   51253   56253       

输出应该看起来像

    County   Year1   Year2   Year3   Year4   Min     Max    Max-Min
1   Autauga  54660   55253   51253   56253   51253   56253  5000

我的第一次拍摄产生了一个字符串作为最大值(我已经阅读了论坛上的所有原因):

df['Max'] = df.max(axis=1)

1)如何排除我的第一列,以便max函数正确运行(我的输出中仍然需要县)?

2)如何运行max,min函数并一次计算每个值的差异?

干杯, P

3 个答案:

答案 0 :(得分:2)

你可以通过一点iloc切片魔术来完成这项工作。

df['Max'] = df.iloc[:, 1:].max(axis=1)
df['Min'] = df.iloc[:, 1:].min(axis=1)
df['Max - Min'] = df['Max'] - df['Min']

df    
    County  Year1  Year2  Year3  Year4    Max    Min  Max - Min
1  Autauga  54660  55253  51253  56253  56253  51253       5000

答案 1 :(得分:2)

您还可以指定只想对数字元素执行此操作。

df['Max'] = df.max(axis=1, numeric_only=True)
df['Min'] = df.min(axis=1, numeric_only=True)
df['Max - Min'] = df['Max'] - df['Min']

# if you only need "Max - Min"
df['Max - Min'] = df.max(1, numeric_only=True) - df.min(1, numeric_only=True)

默认情况下,max函数会尝试使用所有内容。使用extra参数,它将只包含计算中包含float,int和boolean值的列。在DataFrame.max

了解详情

答案 2 :(得分:2)

IIUC:

In [43]: df = df.assign(**{'Max-Min':df.max(1)-df.min(1)})

In [44]: df
Out[44]:
    County  Year1  Year2  Year3  Year4  Max-Min
1  Autauga  54660  55253  51253  56253     5000