python - 在 Pandas 中将列一分为二的简单方法
问题描述
我有一个DataFrame
看起来像这样的熊猫:
transactions_df = pd.DataFrame({'Date': ['2019-08-01', '2019-09-01', '2019-10-01'], 'Amount': [150, -25, 200]})
transactions_df.head()
Date Amount
2019-08-01 150
2019-09-01 -25
2019-10-01 200
如果值分别为正或负,我想将金额列拆分为Invoiced
和。Reimbursed
我目前正在这样做:
def split_trans_amount(row):
invoiced = row['Amount'] if row['Amount'] > 0 else 0
reimbursed = row['Amount'] if row['Amount'] < 0 else 0
return pd.Series([invoiced, reimbursed], index=['Invoiced', 'Reimbursed'])
transactions_in_out_df = transactions_df.apply(lambda x: split_trans_amount(x), axis=1)
transactions_split_df = pd.concat([transactions_df, transactions_in_out_df], axis=1)
transactions_split_df.head()
它给了我我需要的东西:
Date Amount Invoiced Reimbursed
2019-08-01 150 150 0
2019-09-01 -25 0 -25
2019-10-01 200 200 0
但是,在 Pandas 中没有更简单的方法吗?
解决方案
你可以np.clip(..)
在这里使用:
transactions_df['Invoiced'] = transactions_df['Amount'].values.clip(min=0)
transactions_df['Reimbursed'] = transactions_df['Amount'].values.clip(max=0)
这给了我们:
>>> transactions_df
Date Amount Invoiced Reimbursed
0 2019-08-01 150 150 0
1 2019-09-01 -25 0 -25
2 2019-10-01 200 200 0
推荐阅读
- python - 异步管理连接的客户端,同时在 Python 中持续发送数据
- reactjs - 重构 ReactJS 组件以删除 getDerivedStateFromProps
- excel - VBA重复字符串布尔函数#NAME错误
- android - 当我从其他活动中删除孩子时,onChildRemoved 一直在打电话
- php - PHP 通过组合现有数组中的元素创建一个新的多维数组
- javascript - 从左上角到右下角对 lat longs 的对象进行排序
- python - 如何将一列设置为熊猫日期框架中的索引
- react-native - 反应原生地图假和模拟位置
- ruby-on-rails - 在 Rails 5.2 中使用 materializeCss 卡片创建复选框
- python - 从 Python 中的大型单个数据集中创建多个直方图,按用户分组