2015-10-06 99 views
0

我有以下的熊貓DataFramedf.head()重塑熊貓據幀和保存的元組

userid followers experience fixed_date 
0 12134  28266 Intermediate 2012-10-15 
1 12134  28266 Intermediate 2012-10-15 
2 91638  665  Missing 2012-10-15 
3 148401  123 Professional 2012-10-15 
4 5890  2436 Professional 2012-10-15 

我想提出一個新的DataFrame其中的行是userid,列fixed_date,和值是一個元組(followers,experience)。如您所見,我有userid行重複,這是我在嘗試df.pivot()時遇到的錯誤。但followers的數量可以在以後更改,所以我想爲每個userid捕獲該數字。

我可以給出更多關於數據的背景。這些行目前是推文,所以用戶可以(並且經常)在給定的一天中推文多次。因此,我也會重複fixed_date,因爲我忽略了推文的確切時間(HH:MM:SS)。在用戶在給定日期多次推文的情況下,將其分組到單元格值並製作元組數組將很棒。如果這已經要求太多,那麼只需要有多個相同值的列就沒有問題了。如果這是不可能的,我也可以將日期保存到一個單獨的數組,並列舉列0..n。只是拋出想法。

任何想法?

回答

0

這不是優雅,但這種將工作:

df2 = pd.DataFrame(df.loc[:, ['followers', 'fixed_date']]) # New frame with just two cols 
df2.index = df.userid # Set the index to user id 
df2 = df2.drop_duplicates() # remove duplicate records 

或者,如果你只是想元組傳遞到一個數組,你可以這樣做:

df.loc[:, ['userid', 'fixed_date', 'followers']].values 
# array([[12134, '2012-10-15', 28266], 
    [12134, '2012-10-15', 28266], 
    [91638, '2012-10-15', 665], 
    [148401, '2012-10-15', 123], 
    [5890, '2012-10-15', 2436]], dtype=object) 

,你可以用它來作爲傳遞一個稀疏矩陣或轉換爲numpy ndarray /矩陣。

+0

不幸的是,這並沒有達到我上面所描述的。我基本上想要將DataFrame轉換爲marix,其中行是'userid's,列是'fixed_date'中的多個日期。 – David

+0

@David,你能對你想要的實際輸出看起來更具體一點嗎?我編輯我的答案給你一個3元組數組,可以在稀疏矩陣中使用,或者轉換爲你想要的任何numpy數據類型。 – leroyJr