熊猫 - 在不同列的行中找到增加的趋势

时间:2017-12-05 14:38:16

标签: python pandas data-analysis

我有一份印度牛奶生产数据集。我试图通过熊猫获得5个州(如果有的话)的名单,其中过去3年的总产奶量增加了。

State        Total10-11 Total11-12  Total13-14  Total14-15  Total15-16
Andhra Pradesh    11204      12088       13007         9656      10817
Arunachal Pradesh    28         22          43           46         50
Assam               790        797         814          829        844
Bihar              6517       6643        7197         7775       8289
Chhattisgarh       1030       1118        1208         1232       1278
Goa                  60         60          68           66         54
Gujarat            9322       4089       11112        11690      12262
Haryana            6268       6661        7442         7902       8381
Himachal Pradesh   1102       1120        1151         1173       1283

预期产出:

State
Assam
Bihar
Chhattisgarh
Haryana
Himachal Pradesh

我想找到每年牛奶产量呈上升趋势的州。与往年相比,随后几年牛奶产量不应减少。预期的产出状态使产量增加,甚至在生产中也没有下降。我有点坚持这个,我尝试了一些方法,但他们并没有接近正确的答案。解决方案是什么?提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果您只是在寻找趋势,那么我认为可视化就是答案。

你可以这样做。

import matplotlib.pyplot as plt
import pandas as pd

df = df.set_index('state')
df.T.plot(figsize=(10,15))

enter image description here

或者单独看一下:

df.T.plot(figsize=(15,20), subplots=True,layout=(3,3))

enter image description here

答案 1 :(得分:1)

如果您正在寻找差异,那么您可以使用diff > 0cumsum,即

df = df.set_index("State/UT Name")

temp = (df.T.diff() > 0).cumsum()
# Values will increment if the difference between past and present is positive 
State/UT Name  Andhra Pradesh  Arunachal Pradesh  Assam  Bihar  Chhattisgarh  \
Total10-11                  0                  0      0      0             0   
Total11-12                  1                  0      1      1             1   
Total13-14                  2                  1      2      2             2   
Total14-15                  2                  2      3      3             3   
Total15-16                  3                  3      4      4             4   

State/UT Name  Goa  Gujarat  Haryana  Himachal Pradesh  
Total10-11       0        0        0                 0  
Total11-12       0        0        1                 1  
Total13-14       1        1        2                 2  
Total14-15       1        2        3                 3  
Total15-16       1        3        4                 4  

# The one with max sum is the one that kept increasing over time 
temp.sum().nlargest(10)

State/UT Name
Assam                10
Bihar                10
Chhattisgarh         10
Haryana              10
Himachal Pradesh     10
Andhra Pradesh        8
Arunachal Pradesh     6
Gujarat               6
Goa                   3

如果你想要州名,那么

states = temp.sum().nlargest(5).index.tolist()

['Assam', 'Bihar', 'Chhattisgarh', 'Haryana', 'Himachal_Pradesh']