2017-05-06 74 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