2017-03-05 55 views
1

我在重新安排python中的數據框,從CSV文件創建我需要它時遇到問題。在數據幀中的數據是這樣:通過一個沒有唯一值的python數據框迭代

ID  VOLUME  DATETIME 

900  2.36  11/01/2015 13:40 
900  2.30  11/01/2015 13:40 
900  2.18  11/01/2015 13:41 
900  2.30  11/01/2015 13:41 
901  1.88  07/01/2015 17:01 
901  1.80  07/01/2015 17:01 
901  1.73  07/01/2015 17:02 
901  1.80  07/01/2015 17:02 

我已經試過各種轉動上面如何,我需要它,但由於沒有真正的獨特的價值觀,我不能做到這一點的字段。我一直在想我需要使用iterrows來得到我需要它的方式,但一直沒有弄明白。 這是我怎樣,我希望得到的數據:

900↓ 901↓ 

    2.36 1.88 
    2.30 1.80 
    2.18 1.73 
    2.30 1.80 

我想在ID列中顯示每個項目的一列,但我真的開始撞牆我的頭就這一個。我可以像上面那樣創建一個新的數據框,還是我正在以這種錯誤的方式去做?

回答

0

解決方案,當你有ID的不同#行的情況:

In [34]: df 
Out[34]: 
    ID VOLUME   DATETIME 
0 900 2.36 11/01/2015 13:40 
1 900 2.30 11/01/2015 13:40 
2 900 2.18 11/01/2015 13:41 
3 900 2.30 11/01/2015 13:41 
4 901 1.88 07/01/2015 17:01 
5 901 1.80 07/01/2015 17:01 
6 901 1.73 07/01/2015 17:02 
7 901 1.80 07/01/2015 17:02 
8 901 1.11 07/01/2015 17:03 # NOTE: i've intentionally added this row 

In [35]: pd.DataFrame({k : pd.Series(v) 
         for k, v in df.groupby('ID').VOLUME.apply(list).to_dict().items()}) 
Out[35]: 
    900 901 
0 2.36 1.88 
1 2.30 1.80 
2 2.18 1.73 
3 2.30 1.80 
4 NaN 1.11 

OLD答案:

試試這個:

In [12]: pd.DataFrame(df.groupby('ID').VOLUME.apply(list).to_dict()) 
Out[12]: 
    900 901 
0 2.36 1.88 
1 2.30 1.80 
2 2.18 1.73 
3 2.30 1.80 

或:

In [18]: pd.DataFrame(df.groupby('ID').VOLUME.apply(lambda x: x.values).to_dict()) 
Out[18]: 
    900 901 
0 2.36 1.88 
1 2.30 1.80 
2 2.18 1.73 
3 2.30 1.80 

注意:如果您擁有相同數量的行,您的所有ID

+0

非常感謝。我試圖弄清楚數據框,並且老實說我花了好一個星期的時間來試圖解決這個問題。我的行確實有不同數量的ID,所以我很欣賞你覆蓋了所有的途徑,它甚至沒有超出我的想法。 – OldManEast

+0

@OldManEast,很高興我可以幫助:)請考慮[接受](http://meta.stackexchange.com/a/5235)答案,如果你認爲它已經回答了你的問題 – MaxU