2014-03-02 21 views
1

我試圖創建代碼,它將CSV數據從CSV文件中的某些列中取出,並將它們合併到一個新的CSV文件中。我被指示使用熊貓,但我不知道我是否在正確的軌道上。我對Python相當陌生,所以要準備好自己的代碼。Python - 在CSV文件中組合列

我想用data.csv:

Customer_ID,Date,Time,OtherColumns,A,B,C,Cost 
1003,January,2:00,Stuff,1,5,2,519 
1003,January,2:00,Stuff,1,3,2,530 
1003,January,2:00,Stuff,1,3,2,530 
1004,Feb,2:00,Stuff,1,1,0,699 

,並創建一個新的CSV,看起來像這樣:

Customer_ID,ABC 
1003,152 
1003,132 
1003,132 
1004,110 

我至今是:

import csv 
import pandas as pd 

df = pd.read_csv('test.csv', delimiter = ',') 
custID = df.customer_ID 
choiceA = df.A 
choiceB = df.B 
choiceC = df.C 

ofile = open('answer.csv', "wb") 
writer = csv.writer(ofile, delimiter = ',') 
writer.writerow(custID + choiceA + choiceB + choiceC) 

不幸的是,所有這些都是將每行添加到一起,然後將每行的CSV創建爲一行。我的真正最終目標是找到A-C列中最常見的值,並使用最常出現的值將每個客戶組合到同一行中。我很難解釋。我想要的東西,需要data.csv並使得這樣的:

Customer_ID,ABC 
1003,132 
1004,110 
+0

「最發生的值」?如果有兩個具有相同出現次數的ID/ABC對,您希望發生什麼? (例如1003,132和1003,142)。 – DSM

+0

我並不特別在乎現在選擇哪一個,但我想知道將來的參考如何操作哪一個是基於其他計算選擇的。也許如果是在上半年出售,它會選擇較低的價值,但如果是在下半年,則選擇較高的價值。我仍然在學習Python,所以我非常感謝你的幫助 – SgtSeamonkey

回答

2

可以概括你感興趣的列(如果其類型爲字符串):

In [11]: df = pd.read_csv('data.csv', index_col='Customer_ID') 

In [12]: df 
Out[12]: 
       Date Time OtherColumns A B C Cost 
Customer_ID 
1003   January 2:00  Stuff 1 5 2 519 
1003   January 2:00  Stuff 1 3 2 530 
1003   January 2:00  Stuff 1 3 2 530 
1004    Feb 2:00  Stuff 1 1 0 699 

In [13]: res = df[list('ABC')].astype(str).sum(1) # cols = list('ABC') 

In [14]: res 
Out[14]: 
Customer_ID 
1003   152 
1003   132 
1003   132 
1004   110 
dtype: float64 

要獲得CSV,你可以首先使用to_frame(添加所需的列名稱):

In [15]: res.to_frame(name='ABC') # ''.join(cols) 
Out[15]: 
      ABC 
Customer_ID 
1003   152 
1003   132 
1003   132 
1004   110 

In [16]: res.to_frame(name='ABC').to_csv('new.csv') 
+0

令人驚訝的是,它只能在三行中完成,我明顯在過度思考它,非常感謝。你知道一種編碼方式:如果customer_ID = customer_ID在最後一行然後找到所有A的模式,所有的B和所有的C,並且爲每個客戶返回行? – SgtSeamonkey

+0

不知道問什麼,其中一部分可能是'res.groupby(level = 0).last()'。最好在DataFrame的範圍內明確提出新的問題,而不是csvs! :) –

+0

我會多看看,謝謝!我發佈了一個關於它的新問題,但在等待響應時,我會查看res.groupby – SgtSeamonkey