【发布时间】:2016-05-24 21:52:45
【问题描述】:
我有一个带有一些列的熊猫数据框。我想以不同的方式重新排列它们。下面是一个例子:
time,name,feature,value
33 20 May 2016 14:00:00 -0700,John,badL,2
45 19 May 2016 18:00:00 -0700,John,badL,1
120 17 May 2016 11:00:00 -0700,John,badL,1
220 20 May 2016 14:00:00 -0700,John,totalL,20
450 19 May 2016 18:00:00 -0700,John,totalL,15
330 18 May 2016 15:00:00 -0700,Mary,badL,2
330 18 May 2016 15:00:00 -0700,Mary,totalL,20
550 21 May 2016 12:00:00 -0700,Mary,adCmd,4
700 22 May 2016 16:00:00 -0700,Mary,PC,3
800 22 May 2016 16:00:00 -0700,Mary,eCon,200
注意:第一列值(时间)前面是索引值(33、45,120、...)。 从上面的数据框中,我希望得到的数据框为:
time,name,badL,totalL,adCmd,PC,eCon
20 May 2016 14:00:00 -0700,John,2,20,0,0,0
19 May 2016 18:00:00 -0700,John,1,15,0,0,0
17 May 2016 11:00:00 -0700,John,1,0,0,0,0
18 May 2016 15:00:00 -0700,Mary,2,20,0,0,0
21 May 2016 12:00:00 -0700,Mary,0,0,4,0,0
22 May 2016 16:00:00 -0700,Mary,0,0,0,3,200
注意:5 月 17 日,John 没有任何总计 L。所以,用 0 填充它。
有没有一种优雅的方法来做到这一点?我将时间字段设置为 pd.to_datetime,然后,比较...看起来很乏味。对于上面的例子,我只有两个“特征”(badL,totalL)。以后我还会有几个。
这就是我所拥有的 - 但是,它为第二个功能添加了不同的行......(totalL)......而不是将其放在同一行中。
for f in ['badL', 'totalL']:
dff = df[df.feature == f]
print dff
if len(dff.index) > 0:
fullFeatureDf[f] = dff.feature_value
【问题讨论】: