2015-06-08 2 views
0

Это довольно простой вопрос. Я хочу организовать csv определенным образом. Пока у меня это почти так, как я хочу, и это довольно быстро.Добавление столбца с суммой строк и сортировка в python

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) 

ByType выглядит следующим образом:

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

Однако, я хочу это сортируется так, что компания с самой большой общей (сумма строки) будет на самом верху. В этом случае это должна быть компания 2 наверху, затем компания 1, затем компания 3. Он должен выбрать только 20 лучших клиентов, которые будут прочитаны остальным моим кодом на Python.

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) 

Но не только я не получаю выходной bytype2, но этот метод, казалось, имели в виду повторное чтение CSV, а затем добавив столбец, а затем я «все равно придется сортировать их. Должен быть более простой способ сделать это, чтобы я отсутствовал.

+0

Просто добавьте столбец в dataframe Д.Ф. [ключ] = все, что –

+0

@PadraicCunningham я знаю, что это, вероятно, так же просто, как это, но как именно вы добавить его? df [newkeytitle] = отсортировано? Как он знает, где в кадре данных поставить? Я преподавал сам python на прошлой неделе, но я все еще очень новый. – jenryb

+0

yes, просто используйте новое имя col в качестве ключа и все, что вы хотите добавить в качестве значения, можете ли вы поделиться немного, если ваш файл? –

ответ

0

Ответил на мой вопрос после того, как передумал еще один день. Вот как я добавил столбец итогов, а затем отсортирован по этому столбцу.

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) 
Смежные вопросы