jen*_*ryb 3 python sorting sum dataframe pandas
我正在寻找对数据框进行排序。我有这个数据框:
Y X1 X2 X3
Y1 1 0 1
Y2 1 0 0
Y3 1 0 0
Y4 0 1 0
Run Code Online (Sandbox Code Playgroud)
有很多列。如果您将列相加,我想选择总和最大的 X 值。
我一直在尝试通过添加一行来做到这一点,如下所示:
Y X1 X2 X3
Y1 1 0 1
Y2 1 0 0
Y3 1 0 0
Y4 0 1 1
sum 3 1 2
Run Code Online (Sandbox Code Playgroud)
然后我会按总和行对其进行排序
Y X1 X3 X2
Y1 1 1 0
Y2 1 0 0
Y3 1 0 0
Y4 0 1 1
sum 3 2 1
Run Code Online (Sandbox Code Playgroud)
并选择要使用的 30 列。但是,我只能得到行的总和,如下所示:
Y X1 X3 X2 sum
Y1 1 1 0 2
Y2 1 0 0 1
Y3 1 0 0 1
Y4 0 1 1 2
Run Code Online (Sandbox Code Playgroud)
使用
pivot_table['sum'] = pivot_table.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
我也尝试过
pivot_table['sum'] = pivot_table.sum(axis=0)
Run Code Online (Sandbox Code Playgroud)
并尝试添加.transpose()但这不起作用。我还认为可能有比我正在做的逐步尝试更快的方法来做到这一点。
您可以致电sumdf,这将返回一个 Series,然后您可以对该系列进行排序,然后使用该系列的索引来重新排序您的 df:
In [249]:\n# note that column \'X3\' will produce a sum value of 2\nt="""Y X1 X2 X3\nY1 1 0 1\nY2 1 0 1\nY3 1 0 0\nY4 0 1 0"""\n# load the data\ndf = pd.read_csv(io.StringIO(t), sep=\'\\s+\', index_col=[0])\ndf\n\nOut[249]:\n X1 X2 X3\nY \nY1 1 0 1\nY2 1 0 1\nY3 1 0 0\nY4 0 1 0\nRun Code Online (Sandbox Code Playgroud)\n\n结果sum将返回一系列我们想要对其进行排序并传递参数的序列,inplace=False以便它返回一个副本并ascending=False:
In [250]:\n# now calculate the sum, call sort on the series\ns = df.sum().sort(ascending=False, inplace=False)\ns\n\xe2\x80\x8b\nOut[250]:\nX1 3\nX3 2\nX2 1\ndtype: int64\n\nIn [251]:\n# now use fancy indexing to reorder the df\ndf.ix[:,s.index]\n\nOut[251]:\n X1 X3 X2\nY \nY1 1 1 0\nY2 1 1 0\nY3 1 0 0\nY4 0 0 1\nRun Code Online (Sandbox Code Playgroud)\n\n如果您只想要顶部,您可以对索引进行切片n:
In [254]:\ndf = df[s.index[:2]]\ndf\n\nOut[254]:\n X1 X3\nY \nY1 1 1\nY2 1 1\nY3 1 0\nY4 0 0\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |