追加带有行总和的列并在 python 中排序

Appending a Column with sum of rows and sorting in python

这是一个非常基本的问题。我想以某种方式组织一个 csv。到目前为止,我几乎已经拥有了它,而且速度也非常快。

import numpy as np
import pandas as pd
import pandas.util.testing as tm; tm.N = 3


data = pd.DataFrame.from_csv('MYDATA.csv')
byqualityissue = data.groupby(["Name","Type"]).size()
df = pd.DataFrame(bytype)

formatted = df.unstack(level=-1)
formatted[np.isnan(formatted)] = 0
formatted.to_csv('bytype.csv', header=True)

按类型看起来像这样:

Type          Type1        Type2       Type3
Name  
Company 1      10            0           3
Company 2      4             23          3 
Company 3      3             2           0

但是,我希望对其进行排序,以便总计(行的总和)最大的公司位于顶部。在这种情况下,顶部应该是公司 2,然后是公司 1,然后是公司 3。我的 python 代码的其余部分应该 select 只读入前 20 个客户。

Name,         Type1,    Type2,   Type3
Company 2,     4,        23,       3
Company 1,     10,       0,        3
Company 3,     3,        2,        0

我认为最好的方法是将另一列中的总数相加,然后按降序排序。为此,我写了这一行:

sorted = np.sum(formatted, axis=1)

成功输出总数。我看了How to add a new column to a CSV file using Python?

所以写道:

with open('bytype.csv') as csvinput:
    with open('bytype2.csv','w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        reader = csv.reader(csvinput)

        all = []
        row = next(reader)
        row.append('Total')
        all.append(row)

        for row in reader:
            row.append(np.sum(formatted, axis=1))
            all.append(row)

        writer.writerows(all)

但我不仅没有得到 type2 的输出,而且该方法似乎意味着重新读取 csv,然后附加该列,然后我仍然需要对它们进行排序。必须有一种我所缺少的更简单的方法来做到这一点。

改天修修补补后回答了我自己的问题。这是我添加一列总计,然后按该列排序的方法。

includingtotals = pd.concat([formatted,pd.DataFrame(formatted.sum(axis=1),columns=['Total'])],axis=1)
sorted = includingtotals.sort_index(by=['Total'], ascending=[False])
sorted.to_csv('byqualityissue.csv', header=True)