如何将整数按数值拆分为Pandas DataFrame的多行?
解决方案
你可以通过以下步骤实现需求,核心思路是先按整数列重复行,再根据组内序号判断第二整数列的取值:
- 按整数次数重复行:依据
Integer_Column的数值,将每行重复对应次数 - 生成组内序号:对每个
StringColumn分组,给组内每行分配从1开始的连续序号 - 转换整数列值:将第一列整数统一设为1;第二列整数根据序号与原
Integer_Column2的阈值关系,设置为1或0
完整代码
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({'StringColumn': ['A', 'B', 'C'], 'Integer_Column': [5,3,4], 'Integer_Column2': [3,2,1]}) # 步骤1:按Integer_Column的值重复每行 df_repeated = df.loc[df.index.repeat(df['Integer_Column'])].reset_index(drop=True) # 步骤2:生成每个分组内的序号(从1开始) df_repeated['seq'] = df_repeated.groupby('StringColumn').cumcount() + 1 # 步骤3:将第一列整数统一设为1 df_repeated['Integer_Column'] = 1 # 步骤4:根据序号与原阈值的关系,设置第二列整数的值 thresholds = df['Integer_Column2'].repeat(df['Integer_Column']).reset_index(drop=True) df_repeated['Integer_Column2'] = (df_repeated['seq'] <= thresholds).astype(int) # 整理结果:删除辅助列,重命名列名 df_result = df_repeated.drop('seq', axis=1).rename(columns={ 'StringColumn': 'String', 'Integer_Column': 'Integer', 'Integer_Column2': 'Integer' }) print(df_result)
输出结果
运行代码后将得到目标表格:
| String | Integer | Integer |
|---|---|---|
| A | 1 | 1 |
| A | 1 | 1 |
| A | 1 | 1 |
| A | 1 | 0 |
| A | 1 | 0 |
| B | 1 | 1 |
| B | 1 | 1 |
| B | 1 | 0 |
| C | 1 | 1 |
| C | 1 | 0 |
| C | 1 | 0 |
| C | 1 | 0 |
内容的提问来源于stack exchange,提问作者stwpf01
相关产品推荐
相关产品推荐

