Python 数据帧行上的十进制列

Python 数据帧行上的十进制列,python,pandas,numpy,Python,Pandas,Numpy,我有这样一个数据帧: In [207] SUE_df.iloc[45:59,354:359] Out[207]: PLNTSYS00013 PLNFI0800016 PLODLPL00013 PLTELL000023 PLONE0000014 2009-04-01 -2.7322 0.488461 -0.330779 -0.100912 -2.12907 2009-07-01 4.04982 3.49382

我有这样一个数据帧:

In [207] SUE_df.iloc[45:59,354:359]
Out[207]: 
            PLNTSYS00013 PLNFI0800016 PLODLPL00013 PLTELL000023 PLONE0000014
2009-04-01      -2.7322     0.488461    -0.330779    -0.100912     -2.12907
2009-07-01      4.04982      3.49382    -0.298544    -0.181343      1.89539
2009-10-01     -3.57738     -5.08303      8.24463    -0.103642     0.643103
2010-01-01     -1.42976     0.325262    -0.058854    -0.555572     0.268437
2010-04-01      1.33034    -0.807921     0.191467    -0.311175      2.72122
2010-07-01   -0.0235675    -0.048386     0.258616    -0.171754      -2.8844
2010-10-01     0.660161      4.93671     0.297664     0.751903    -0.851329
2011-01-01      2.03963    -0.650254     0.223173      1.00279     0.114187
2011-04-01      5.06403     0.828365    -0.110528     0.244366      0.11977
2011-07-01     -1.18217      2.29948     0.521475    0.0705636    0.0486713
2011-10-01     0.118289      1.81084     0.198643    -0.768194    -0.833647
2012-01-01     0.148177   -0.0794947    0.0713122     -1.50967    -0.168698
2012-04-01     0.641605    -0.157657     0.036897      1.21578     -1.03026
2012-07-01      0.76635     -1.55429    -0.103827     0.217835     0.109092
for a in SUE_df.iloc[45:59,354:359].index:
    SUE2.loc[a] = pd.qcut(SUE_df.iloc[45:59,354:359].loc[a], 5,labels=False ) + 1  

Out[212]: 
            PLNTSYS00013  PLNFI0800016  PLODLPL00013  PLTELL000023  PLONE0000014
2009-04-01             1             5             3             4             2
2009-07-01             5             4             1             2             3
2009-10-01             2             1             5             3             4
2010-01-01             1             5             3             2             4
2010-04-01             4             1             3             2             5
2010-07-01             4             3             5             2             1
2010-10-01             3             5             2             4             1
2011-01-01             5             1             3             4             2
2011-04-01             5             4             1             3             2
2011-07-01             1             5             4             3             2
2011-10-01             3             5             4             2             1
2012-01-01             5             3             4             1             2
2012-04-01             4             2             3             5             1
2012-07-01             5             1             2             4             3
我想得到一个十位数的df,我写了我自己的方法,但我一直认为必须有一个更简单的方法。我使用的是
”.qcut(df,10,labels=False)
,但它只适用于系列而不适用于DataFrame,因此我需要迭代行,然后将它们插入到新的df中,这并不复杂,但需要一段时间

我希望得到这样的结果:

In [207] SUE_df.iloc[45:59,354:359]
Out[207]: 
            PLNTSYS00013 PLNFI0800016 PLODLPL00013 PLTELL000023 PLONE0000014
2009-04-01      -2.7322     0.488461    -0.330779    -0.100912     -2.12907
2009-07-01      4.04982      3.49382    -0.298544    -0.181343      1.89539
2009-10-01     -3.57738     -5.08303      8.24463    -0.103642     0.643103
2010-01-01     -1.42976     0.325262    -0.058854    -0.555572     0.268437
2010-04-01      1.33034    -0.807921     0.191467    -0.311175      2.72122
2010-07-01   -0.0235675    -0.048386     0.258616    -0.171754      -2.8844
2010-10-01     0.660161      4.93671     0.297664     0.751903    -0.851329
2011-01-01      2.03963    -0.650254     0.223173      1.00279     0.114187
2011-04-01      5.06403     0.828365    -0.110528     0.244366      0.11977
2011-07-01     -1.18217      2.29948     0.521475    0.0705636    0.0486713
2011-10-01     0.118289      1.81084     0.198643    -0.768194    -0.833647
2012-01-01     0.148177   -0.0794947    0.0713122     -1.50967    -0.168698
2012-04-01     0.641605    -0.157657     0.036897      1.21578     -1.03026
2012-07-01      0.76635     -1.55429    -0.103827     0.217835     0.109092
for a in SUE_df.iloc[45:59,354:359].index:
    SUE2.loc[a] = pd.qcut(SUE_df.iloc[45:59,354:359].loc[a], 5,labels=False ) + 1  

Out[212]: 
            PLNTSYS00013  PLNFI0800016  PLODLPL00013  PLTELL000023  PLONE0000014
2009-04-01             1             5             3             4             2
2009-07-01             5             4             1             2             3
2009-10-01             2             1             5             3             4
2010-01-01             1             5             3             2             4
2010-04-01             4             1             3             2             5
2010-07-01             4             3             5             2             1
2010-10-01             3             5             2             4             1
2011-01-01             5             1             3             4             2
2011-04-01             5             4             1             3             2
2011-07-01             1             5             4             3             2
2011-10-01             3             5             4             2             1
2012-01-01             5             3             4             1             2
2012-04-01             4             2             3             5             1
2012-07-01             5             1             2             4             3

是否有任何数据帧方法可以对整个df按行执行?

我不确定唯一想到的是
df.apply(lambda x:pd.qcut(x,5,labels=False))。添加(1)
,但它还是和您现有的方法一样有效method@anky_91实际上,您的解决方案更有效。在我的机器上,至少比OP current方法快一倍2。对于行使用
axis=1
df.apply(lambda x:pd.qcut(x,5,labels=False),axis=1)。添加(1)
,例如,可能使用
rank
也会这样做
df.rank(axis=1)
,但对于完整的数据,它似乎有很多列,也许是
df.rank(axis=1)*10//df.shape[1]
或者类似的东西来重新调整排名?我不确定唯一想到的是
df.apply(lambda x:pd.qcut(x,5,labels=False))。添加(1)
,但它还是像你已经存在的一样有效method@anky_91实际上,您的解决方案更有效。在我的机器上,至少比OP current方法快一倍2。对于行使用
axis=1
df.apply(lambda x:pd.qcut(x,5,labels=False),axis=1)。添加(1)
,例如,可能使用
rank
也会这样做
df.rank(axis=1)
,但对于完整的数据,它似乎有很多列,也许
df.rank(axis=1)*10//df.shape[1]
或者类似的东西来重新调整排名?