首页 > 解决方案 > 如何让熊猫像 MS Excel 一样使用单元格算术?

问题描述

目标:在 Pandas 数据框中的给定位置放置一个函数,该函数会随着数据框中的调整而更新

描述:我试图从 400,000 中减去 75,000 得到 325,000 并将其显示在 Pandas 数据框中。目前,“结束现金”行为我提供了我所期待的所有答案。但是,这些是硬编码值而不是动态的。

import pandas as pd

data_2 = [['Init Cash', 400000, 325000,335000,355000,275000,225000,240000],
          ['Matur CDs',0,0,0,0,0,0,0],
          ['Interest',0,0,0,0,0,0,0],
          ['1-mo CDs',0,0,0,0,0,0,0],
          ['3-mo CDs',0,0,0,0,0,0,0],
          ['6-mo CDs',0,0,0,0,0,0,0],
          ['Cash Uses',75000,-10000,-20000,80000,50000,-15000,60000],
          ['End Cash', 325000,335000,355000,275000,225000,240000,180000]]

df_2 = pd.DataFrame(data_2,columns=['Month', 'Month 1', 'Month 2', 'Month 3', 'Month 4', 'Month 5', 'Month 6', 'End'])
df_2_copy = df_2.copy()

我想我可以摆脱类似以下的事情:

df_2_copy.iloc[7]['Month 1'] == (df_2_copy.iloc[0]['Month 1'] - df_2_copy.iloc[6]['Month 1'])

但是,不幸的是,这对我不起作用。

任何帮助,将不胜感激。

标签: pythonpandas

解决方案


按列创建索引Month,因此可以仅减去按位置选择的数字列DataFrame.iloc

df_2_copy = df_2_copy.set_index('Month')
df_2_copy.iloc[7] = df_2_copy.iloc[0] - df_2_copy.iloc[6]
print (df_2_copy)

这会产生:

           Month 1  Month 2  Month 3  Month 4  Month 5  Month 6     End
Month                                                                  
Init Cash   400000   325000   335000   355000   275000   225000  240000
Matur CDs        0        0        0        0        0        0       0
Interest         0        0        0        0        0        0       0
1-mo CDs         0        0        0        0        0        0       0
3-mo CDs         0        0        0        0        0        0       0
6-mo CDs         0        0        0        0        0        0       0
Cash Uses    75000   -10000   -20000    80000    50000   -15000   60000
End Cash    325000   335000   355000   275000   225000   240000  180000

另一种解决方案是DataFrame.loc按标签选择行:

df_2_copy.loc['End Cash'] = df_2_copy.loc['Init Cash'] - df_2_copy.loc['Cash Uses']

如果行不存在,则使用放大设置创建新行。


推荐阅读