2017-05-06 47 views
-4

我在尋找一個優雅的方式來匹配熊貓數據框中的日期時間。 原始數據是這樣的:熊貓匹配日期並在新列中添加副本

point_id  datetime  value1 value2   
    1  2017-05-2017 00:00 1  1.1 
    2  2017-05-2017 00:00 2  2.2 
    3  2017-05-2017 00:00 3  3.3 
    2  2017-05-2017 01:00 4  4.4 

的結果應該是什麼樣子:

datetime   value value_cal value2 value_calc2 value3 value_calc3 
2017-05-2017 00:00 1  1.1  2  2.2   3   3.3 
2017-05-2017 01:00 Nan  Nan  4  4.4   Nan   NaN 

到底應該有每個日期時間一行和decleared因爲如此缺少數據點。

+0

這個問題不夠明確,目的,什麼是你想怎麼辦,有什麼背景? – Satyadev

+0

[有幫助嗎?](http://stackoverflow.com/a/43820429/5741205) – MaxU

+0

@MaxU完美...非常感謝!我真的錯過了樞軸功能,需要深入挖掘 - 欣賞 – klener89

回答

0
In [180]: x = (df.drop('point_id',1) 
    ...:  .rename(columns={'value1':'value','value2':'value_cal'}) 
    ...:  .assign(n=df.groupby('datetime')['value1'].cumcount()+1) 
    ...:  .pivot_table(index='datetime', columns='n', values=['value','value_cal']) 
    ...:  .sort_index(axis=1, level=1) 
    ...:) 
    ...: 

In [181]: x 
Out[181]: 
        value value_cal value value_cal value value_cal 
n      1   1  2   2  3   3 
datetime 
2017-05-2017 00:00 1.0  1.1 2.0  2.2 3.0  3.3 
2017-05-2017 01:00 4.0  4.4 NaN  NaN NaN  NaN 

現在我們可以「修復」列名

In [182]: x.columns = ['{0[0]}{0[1]}'.format(c) for c in x.columns] 

In [183]: x 
Out[183]: 
        value1 value_cal1 value2 value_cal2 value3 value_cal3 
datetime 
2017-05-2017 00:00  1.0   1.1  2.0   2.2  3.0   3.3 
2017-05-2017 01:00  4.0   4.4  NaN   NaN  NaN   NaN