python - 如何从这两个其他单元格之间的大多数单元格的列中提取 Pandas 中其他两个单元格之间的所有单元格?
问题描述
我有多个财务报表,但并非所有财务报表都有相同的条目——有些条目比其他的多——我想将它们全部合并到一个包含所有条目的单一报表中。
我可以在 Excel 中手动完成,因为它不是很多,但我想让计算机做它来仔细检查我得到了它们。
所以,这就是我所做的:我创建了一个数据框,其中每一列都有来自其中一个财务报表的条目名称。
财务报表1 | 财务报表2 | 财务报表3 |
---|---|---|
收入 | 收入 | 收入 |
收入1 | 收入1 | 收入1 |
收入2 | 收入2 | 收入2 |
花费 | 花费 | 收入3 |
费用1 | 费用1 | 花费 |
费用2 | 利润 | 费用1 |
费用3 | - | 费用2 |
利润 | - | 利润 |
- | - | - |
我的想法是运行一个脚本来分析两个组标题之间的单元格数量,并将这两个值之间的所有字符串返回到“合并”列,包括第一个,但不是最后一个。
我的最终结果将如下所示:
财务报表1 | 财务报表2 | 财务报表3 | 合并 |
---|---|---|---|
收入 | 收入 | 收入 | 收入 |
收入1 | 收入1 | 收入1 | 收入1 |
收入2 | 收入2 | 收入2 | 收入2 |
花费 | 花费 | 收入3 | 收入3 |
费用1 | 费用1 | 花费 | 花费 |
费用2 | 利润 | 费用1 | 费用1 |
费用3 | - | 费用2 | 费用2 |
利润 | - | 利润 | 费用3 |
- | - | - | 利润 |
我是 Pandas 的初学者,到目前为止,这是我通过在堆栈中搜索得出的结果:
df = pd.read_excel(file)
df['Consolidated']=0
df.head()
df['Consolidated'].iloc[1] = df['FinancialStatement1'][df['FinancialStatement1'].between(
'REVENUES', 'EXPENSES',
inclusive=False
)].tolist()
但是,这段代码给了我"A value is trying to be set on a copy of a slice from a DataFrame"
. 我尝试只使用 df.iloc[3,0] 但它也不起作用。无论如何,这段代码无论如何都不会做我想要的,因为它没有选择两个组标题之间的大多数项目的列表。
解决方案
您可以创建列中所有条目的 SET。Python SET 将消除重复项。然后你转换到一个列表并使用所有条目的超集创建一个 pd 并将其连接回数据帧。
s = set()
for col in df.columns:
s |= set(df[col])
l = sorted(list(s - set(['-'])))
df1 = pd.DataFrame(l,columns = ['Consolidated'])
df = df.join(df1,how='outer').replace(np.nan,'-')
财务报表1 | 财务报表2 | 财务报表3 | 合并 | |
---|---|---|---|---|
0 | 收入 | 收入 | 收入 | 花费 |
1 | 收入1 | 收入1 | 收入1 | 费用1 |
2 | 收入2 | 收入2 | 收入2 | 费用2 |
3 | 花费 | 花费 | 收入3 | 费用3 |
4 | 费用1 | 费用1 | 花费 | 利润 |
5 | 费用2 | 利润 | 费用1 | 收入 |
6 | 费用3 | - | 费用2 | 收入1 |
7 | 利润 | - | 利润 | 收入2 |
8 | - | - | - | 收入3 |
推荐阅读
- c# - 将Log4Net添加到依赖注入后如何访问
- mysql - 为了避免命名错误的列和大量额外的表,制作表示相似但不同模型数据的表的最佳方法是什么?
- mongodb - MongoDB查询以获取具有字符串数组的字段
- reactjs - 从 Express 后端在 Reactjs 中显示图像
- html - div 内的 div 有一个上边距,我不知道如何删除
- javascript - 如何在 MomentJS 上获取 Date 对象,但作为 UTC(防止 `toDate()` 成为 `locale`)?
- python - 在多个条件下选择带有过滤器正则表达式的列
- android - 单击按钮时如何设置文本值?
- primefaces - 使用键盘进行辅助功能时如何禁用 Primefaces 日历日期选择器
- api - 从 PHP 向后台移除程序 API 执行 cURL 请求会引发文件未找到错误