Python 按元素减去两个数据帧的值
作为对象构造函数的一部分,我想从元素角度减去两个数据帧的值:Python 按元素减去两个数据帧的值,python,pandas,dataframe,subtraction,Python,Pandas,Dataframe,Subtraction,作为对象构造函数的一部分,我想从元素角度减去两个数据帧的值: self.dfload=pd.read_csv(self.name +'/' + 'load.csv') self.dfload.set_index('snapshot', inplace=True) load_1 load_2 load_3 load_4 snapshot
self.dfload=pd.read_csv(self.name +'/' + 'load.csv')
self.dfload.set_index('snapshot', inplace=True)
load_1 load_2 load_3 load_4
snapshot
2018-01-01 00:00:00 68.248569 91.998188 64.988923 139.535086
2018-01-01 00:15:00 138.274243 127.186259 80.769227 33.509007
2018-01-01 00:30:00 129.824298 56.706114 75.234845 138.610287
2018-01-01 00:45:00 51.754610 45.703056 73.060490 36.913774
2018-01-01 01:00:00 52.129775 139.315283 67.093788 60.488806
及
借
每个元素的结果为NaN,两个dfs的连接为:
load_1 load_2 load_3 ... supply_1 supply_2 ...
snapshot
2018-01-01 00:00:00 NaN NaN NaN NaN NaN NaN
.
.
将单个列相互减去没有问题。不幸的是,这不是理想的解决方案,因为我想保持未定义的列数。如果两个数据帧中相同的列名称和索引减去由第二个
数据帧创建的numpy数组:
self.dfresidualLoad=self.dfsupply - self.dfload.values
如果列名称的位置匹配,则使用重命名
列:
d = dict(zip(dfload.columns, dfsupply.columns))
df = dfsupply.subtract(dfload.rename(columns=d), axis='column')
print (df)
supply_1 supply_2 supply_3 supply_4
2018-01-01 00:00:00 -39.800552 -46.614811 -8.362779 -99.490238
2018-01-01 00:15:00 -100.739365 -98.091279 -13.046690 -18.506559
2018-01-01 00:30:00 -83.660493 -28.381557 -48.911892 -115.359383
2018-01-01 00:45:00 -3.561836 9.346799 -0.188290 -15.311739
2018-01-01 01:00:00 8.369661 -85.616954 7.580784 -18.063186
确保形状、索引和列相等,然后减法将在元素方面起作用。
self.dfresidualLoad=self.dfsupply - self.dfload.values
d = dict(zip(dfload.columns, dfsupply.columns))
df = dfsupply.subtract(dfload.rename(columns=d), axis='column')
print (df)
supply_1 supply_2 supply_3 supply_4
2018-01-01 00:00:00 -39.800552 -46.614811 -8.362779 -99.490238
2018-01-01 00:15:00 -100.739365 -98.091279 -13.046690 -18.506559
2018-01-01 00:30:00 -83.660493 -28.381557 -48.911892 -115.359383
2018-01-01 00:45:00 -3.561836 9.346799 -0.188290 -15.311739
2018-01-01 01:00:00 8.369661 -85.616954 7.580784 -18.063186