我有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?
答案 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; }