如果给定一个使用datetimeindex索引的数据框,是否有一种有效的方法可以在给定的日期内对值进行规范化?例如,我想对每一天的所有值求和,然后将每一列的值除以该天的结果总和。
我可以轻松地按日期分组并计算除数(每个日期的每一列的值的总和),但是我不完全确定将原始数据帧除以结果总和df的最佳方法。
Example dataframe with datetimeindex and resulting df from sum
我试图做类似
df / df.groupby(df.index.to_period('D')).sum()
但是它的表现却不符合我的期望。
相反,我到处都有NaN的df,并将Date添加为新索引。
玩具娱乐:
df = pd.DataFrame([[1,2],[3,4],[5,6],[7,8]],columns=['a','b'],
index=pd.to_datetime(['2017-01-01 14:30:00','2017-01-01 14:31:00',
'2017-01-02 14:30:00', '2017-01-02 14:31:00']))
df / df.groupby(df.index.to_period('D')).sum()
产生
a b
2017-01-01 14:30:00 NaN NaN
2017-01-01 14:31:00 NaN NaN
2017-01-02 14:30:00 NaN NaN
2017-01-02 14:31:00 NaN NaN
2017-01-01 NaN NaN
2017-01-02 NaN NaN
答案 0 :(得分:0)
您将需要将数据框复制并粘贴为文本而不是图像,因此我可以提供更多帮助,但这是一个示例:
样本df
//form.js
import '../../assets/form.scss'
export default {
render(createElement){
return createElement('form',{
class:{
form:true
},
attrs: {
class:'form'
}
}, [
createElement('input',{attrs: {'placeholder':'Enter url'}}),
createElement('button', 'Submit')
])
然后您当前正在做什么:
df1 = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'),
index=pd.date_range('2017-01-03', '2017-01-07'))
df2 = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'),
index=pd.date_range('2017-01-03', '2017-01-07'))
df = pd.concat([df1,df2])
A B C D E
2017-01-03 1.393874 1.933301 0.215026 -0.412957 -0.293925
2017-01-04 0.825777 0.315449 2.317292 -0.347617 -2.427019
2017-01-05 -0.372916 -0.931185 0.049707 0.635828 -0.774566
2017-01-06 1.564714 -1.582461 1.455403 0.521305 -2.175344
2017-01-07 1.255747 1.967338 -0.766391 -0.021921 0.672704
2017-01-03 0.620301 -1.521681 -0.352800 -1.394239 -1.206983
2017-01-04 -0.041829 -0.870871 -0.402440 0.268725 1.499321
2017-01-05 -1.098647 1.690136 1.004087 0.304037 1.235310
2017-01-06 0.305645 -0.327096 0.280591 -0.476904 1.652096
2017-01-07 1.251927 0.469697 0.047694 1.838995 -0.258889
看看第一行col A
df / df.groupby(df.index).sum()
A B C D E
2017-01-03 0.692032 4.696817 -1.560723 0.228507 0.195831
2017-01-03 0.307968 -3.696817 2.560723 0.771493 0.804169
2017-01-04 1.053357 -0.567944 1.210167 4.406211 2.616174
2017-01-04 -0.053357 1.567944 -0.210167 -3.406211 -1.616174
2017-01-05 0.253415 -1.226937 0.047170 0.676510 -1.681122
2017-01-05 0.746585 2.226937 0.952830 0.323490 2.681122
2017-01-06 0.836585 0.828706 0.838369 11.740853 4.157386
2017-01-06 0.163415 0.171294 0.161631 -10.740853 -3.157386
2017-01-07 0.500762 0.807267 1.066362 -0.012064 1.625615
2017-01-07 0.499238 0.192733 -0.066362 1.012064 -0.625615
,因此您的1.393874 / (1.393874 + 0.620301) = 0.6920322216292031
示例可以正常工作。
如果您的数据包含NaN,也要小心,因为df / df.groupby(df.index).sum()
np.nan / a number = nan