Python Pandas两个DataFrame的对应列逻辑操作
Python Pandas两个DataFrame行索引不完全相同,但是需要求两个DataFrame对应行进行逻辑操作。
例如:公司在多个银行有账户,现公司本月有收入表和支出表,需要计算在各银行的结余情况。两个表的DataFrame如下:
收入表(income)
| 收入 |
---|
中国工商银行 | 30000 |
中国农业银行 | 10000 |
中国银行 | 20000 |
中国建设银行 | 50000 |
交通银行 | 60000 |
支出表(payout)
| 支出 |
---|
中国工商银行 | 20000 |
中国农业银行 | 30000 |
中国邮政储蓄银行 | 10000 |
解决方法:
直接使用join合成一个表,将支出表中支出列变成收入表中的一个列,再进行逻辑操作。
合并
merge_df = income.join(payout)
| 收入 | 支出 |
---|
中国工商银行 | 30000 | 20000 |
中国农业银行 | 10000 | 30000 |
中国银行 | 20000 | NaN |
中国建设银行 | 50000 | NaN |
交通银行 | 60000 | NaN |
中国邮政储蓄银行 | NaN | 10000 |
填充 NaN
merge_df.fillna(0, inplace=True)
| 收入 | 支出 |
---|
中国工商银行 | 30000 | 20000 |
中国农业银行 | 10000 | 30000 |
中国银行 | 20000 | 0 |
中国建设银行 | 50000 | 0 |
交通银行 | 60000 | 0 |
中国邮政储蓄银行 | 0 | 10000 |
计算结余
merge_df.loc[:, '结余'] = merge_df.loc[:, '收入'] - merge_df.loc[:, '支出']
| 收入 | 支出 | 结余 |
---|
中国工商银行 | 30000 | 20000 | 10000 |
中国农业银行 | 10000 | 30000 | -20000 |
中国银行 | 20000 | 0 | 20000 |
中国建设银行 | 50000 | 0 | 50000 |
交通银行 | 60000 | 0 | 60000 |
中国邮政储蓄银行 | 0 | 10000 | -10000 |
总计
merge_df.loc['总计', :] = merge_df.sum()
| 收入 | 支出 | 结余 |
---|
中国工商银行 | 30000 | 20000 | 10000 |
中国农业银行 | 10000 | 30000 | -20000 |
中国银行 | 20000 | 0 | 20000 |
中国建设银行 | 50000 | 0 | 50000 |
交通银行 | 60000 | 0 | 60000 |
中国邮政储蓄银行 | 0 | 10000 | -10000 |
总计 | 1700000 | 60000 | 110000 |