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]
或者类似的东西来重新调整排名?