使用表格,我有一个来自pdf的交易数据框架,其布局如下:
| | Details | Transaction |
--- ------------- -------------
| 0 | Date: 11:20 | Debit |
| 1 | 01/01/2020 | $100.50 |
| 2 | Date: 13:15 | Credit |
| 3 | 01/02/2020 | $50.00 |
--- ------------- -------------
我想合并来自同一事务的行。在这种情况下,行[0,1]和[2,3]。
我的想法是找到带有字符串“日期”的每个行号,然后合并这些行。
index = list(df.index[df['Details'].str.contains('Date')]
>>> [0, 2]
我希望输出为:
| | Details | Transaction |
--- ------------- -------------
| 0 | Date: 11:20 | Debit |
| | 01/01/2020 | $100.50 |
| 1 | Date: 13:15 | Credit |
| | 01/02/2020 | $50.00 |
--- ------------- -------------
答案 0 :(得分:3)
使用Series.str.contains
+ Series.cumsum
创建一个分组器g
,然后使用DataFrame.groupby
将数据帧分组在g
和agg
上,并使用{ {1}}:
join
另一个想法(如果数据帧结构是固定的):
g = df['Details'].str.contains('(?i)Date:').cumsum()
df = df.groupby(g, as_index=False).agg(' '.join)
结果:
df = df.groupby(df.index // 2).agg(' '.join)