如何使用细胞算术让熊猫像MS Excel一样工作?

时间:2019-05-18 13:31:05

标签: python pandas

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

说明:我正尝试从400,000中减去75,000,得出325,000,并将其显示在Pandas datframe中。目前,“结束现金”行为我提供了所有期望的答案。但是,这些是硬编码值,而不是动态值。

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'])

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

按列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']

如果行不存在,则使用setting with enlargement创建一个新行。