You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按指定字符串值拆分DataFrame?

按指定字符串拆分Pandas DataFrame

问题场景

给定如下DataFrame,需要在txn_details列出现opening_balance时拆分,将每个opening_balance及其后续(直到下一个opening_balance前)的行拆分为独立的DataFrame:

txn_details    amt
0  opening_balance 13000
1  opening_balance 15000
2         upi2873 12879
3       upi182y31 12301
4  opening_balance 85050
5     upi79279831  8400

期望得到3个独立的DataFrame,每个以opening_balance起始。

解决方案

核心思路是用cumsum()生成分组标识,再通过groupby拆分。具体代码如下:

import pandas as pd

# 构建示例DataFrame
data = {
    'txn_details': ['opening_balance', 'opening_balance', 'upi2873', 'upi182y31', 'opening_balance', 'upi79279831'],
    'amt': [13000, 15000, 12879, 12301, 85050, 8400]
}
df = pd.DataFrame(data)

# 生成分组ID:每次遇到opening_balance,分组ID递增
df['group_id'] = (df['txn_details'] == 'opening_balance').cumsum()

# 按分组ID拆分,移除临时的group_id列
split_dfs = [group.drop('group_id', axis=1) for _, group in df.groupby('group_id')]

# 赋值给指定变量
df_1 = split_dfs[0]
df_2 = split_dfs[1]
df_3 = split_dfs[2]

验证输出

  • df_1输出:
txn_details    amt
0  opening_balance 13000
  • df_2输出:
txn_details    amt
1  opening_balance 15000
2         upi2873 12879
3       upi182y31 12301
  • df_3输出:
txn_details    amt
4  opening_balance 85050
5     upi79279831  8400

说明

如果之前使用cumsum()未得到预期结果,大概率是没正确将条件判断的布尔值转为累加的分组ID。这里(df['txn_details'] == 'opening_balance').cumsum()会为每个连续的分组生成唯一ID,确保每个opening_balance开头的区块被正确拆分。

内容的提问来源于stack exchange,提问作者Vaishnav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:35:01