pandas diff()为第一个差异给出0值

时间:2017-03-12 14:26:14

标签: python pandas numpy dataframe

我有df:

Hour  Energy Wh  
1        4          
2        6           
3        9
4        15

我想添加一个显示每小时差异的列。我正在使用这个:

df['Energy Wh/h'] = df['Energy Wh'].diff().fillna(0)

DF1:

Hour  Energy Wh  Energy Wh/h
1        4          0
2        6          2 
3        9          3
4        15         6

然而,小时1值在Energy Wh / h列中显示为0,而我希望它显示为4,如下所示:

Hour  Energy Wh  Energy Wh/h
1        4          4
2        6          2 
3        9          3
4        15         6

我尝试过使用np.where:

df['Energy Wh/h']  = np.where(df['Hour'] == 1,df['Energy Wh'].diff().fillna(df['Energy Wh']),df['Energy Wh'].diff().fillna(0))

但是我仍然在小时1行(df1)中获得0值,没有错误。我如何获得“能量之和”的价值?填写小时1而不是0?

2 个答案:

答案 0 :(得分:3)

您可以fillna()使用原始列,而不使用np.where

>>> df['Energy Wh/h'] = df['Energy Wh'].diff().fillna(df['Energy Wh'])
>>> df
      Energy Wh  Energy Wh/h
Hour
   1          4          4.0
   2          6          2.0
   3          9          3.0
   4         15          6.0

答案 1 :(得分:2)

diff的第一个值始终是NaN,所以更快的是仅将fillna float替换为int,将NaN值转换为{{} 1}} loc(如有必要 - 没有其他float s而没有其他df['Energy W/h'] = df['Energy Wh'].diff() df.loc[0, 'Energy W/h'] = df['Energy Wh'].iloc[0] df['Energy W/h'] = df['Energy W/h'].astype(int) print (df) Hour Energy Wh Energy W/h 0 1 4 4 1 2 6 2 2 3 9 3 3 4 15 6 值):

df.index = [5,6,7,8]
print (df)
   Hour  Energy Wh
5     1          4
6     2          6
7     3          9
8     4         15

df['Energy W/h'] = df['Energy Wh'].diff()
df.loc[df.index[0], 'Energy W/h'] = df['Energy Wh'].iloc[0]
df['Energy W/h'] = df['Energy W/h'].astype(int)
print (df)
   Hour  Energy Wh  Energy W/h
5     1          4           4
6     2          6           2
7     3          9           3
8     4         15           6

更通用的是:

#myTableData tr td div {text-align:center; }