Pandas:找出数据框中所有列的最大范围

9 投票
1 回答
95594 浏览
提问于 2025-04-18 13:20

我刚开始学习编程,所以希望我能清楚地提出我的问题,也许你们可以帮我找到答案。

我有一个叫“x”的数据框,里面的索引代表一年中的周数,每一列代表一个城市的数值。我想找出哪一列的数值范围最大(也就是最大值减去最小值的结果)。我想这可能需要用到循环来找出每一列的最大值和最小值,然后把这些值存储成一个对象(或者也可以是底部的新行),最后再从这个对象(或行)中找出最大的值。

这个数据框看起来是这样的:

        City1 City2 ... CityN 
week
1
2
3
4
...
53

如果你们能给我一些关于礼仪或措辞的反馈,我也会很感激。

1 个回答

14

你可以用类似 (df.max() - df.min()).idxmax() 的方式来找到最大值的那一列:

>>> df = pd.DataFrame(np.random.random((5,4)), index=pd.Series(range(1,6), name="week"), columns=["City{}".format(i) for i in range(1,5)])
>>> df
         City1     City2     City3     City4
week                                        
1     0.908549  0.496167  0.220340  0.464060
2     0.429330  0.770133  0.824774  0.155694
3     0.893270  0.980108  0.574897  0.378443
4     0.982410  0.796103  0.080877  0.416432
5     0.444416  0.667695  0.459362  0.898792
>>> df.max() - df.min()
City1    0.553080
City2    0.483941
City3    0.743898
City4    0.743098
dtype: float64
>>> (df.max() - df.min()).idxmax()
'City3'
>>> df[(df.max() - df.min()).idxmax()]
week
1       0.220340
2       0.824774
3       0.574897
4       0.080877
5       0.459362
Name: City3, dtype: float64

如果有可能有多列的范围都是最大的,那你可能需要用下面这种方式:

>>> col_ranges = df.max() - df.min()
>>> df.loc[:,col_ranges == col_ranges.max()]
         City3
week          
1     0.220340
2     0.824774
3     0.574897
4     0.080877
5     0.459362

来处理。

撰写回答