如何将正负整数拆分为Pandas DataFrame的多行?
实现DataFrame的行重复与值转换
核心思路
根据Integer_Column的绝对值确定每行需要重复的次数,同时将该列的值替换为与原数符号一致的±1。
完整代码示例
import pandas as pd import numpy as np # 原DataFrame df = pd.DataFrame({'String_Column': ['A', 'B', 'C'], 'String_Column_2': ['X', 'Y', 'Z'], 'Integer_Column': [1, -2, 3]}) # 1. 计算每行的重复次数(取Integer_Column的绝对值) df['repeat_times'] = df['Integer_Column'].abs() # 2. 按次数重复行 df_expanded = df.loc[df.index.repeat(df['repeat_times'])] # 3. 将Integer_Column转换为±1(保留原符号) df_expanded['Integer_Column'] = np.sign(df_expanded['Integer_Column']) # 4. 移除临时的repeat_times列(可选) df_expanded = df_expanded.drop('repeat_times', axis=1) # 查看结果 print(df_expanded)
运行结果
| String_Column | String_Column_2 | Integer_Column |
|---|---|---|
| A | X | 1 |
| B | Y | -1 |
| B | Y | -1 |
| C | Z | 1 |
| C | Z | 1 |
| C | Z | 1 |
代码说明
df.index.repeat(df['repeat_times']):根据repeat_times的数值,重复对应索引的行np.sign():直接返回数值的符号,正数返回1,负数返回-1,完美匹配需求- 若不想依赖numpy,也可以用lambda表达式实现符号转换:
df_expanded['Integer_Column'] = df_expanded['Integer_Column'].apply(lambda x: 1 if x > 0 else -1)
内容的提问来源于stack exchange,提问作者Annie Carter
相关产品推荐
相关产品推荐

