我有一个看起来像这样的数据框
import pandas as pd
import numpy as np
# Create data set.
dataSet = {'id': ['A', 'A', 'B'],
'id_2': [1, 2, 1] ,
'number': [320, 169, 120],
'add_number' : [4,6,3]}
# Create dataframe with data set and named columns.
df = pd.DataFrame(dataSet, columns= ['id', 'id_2','number', 'add_number'])
id id_2 number add_number
0 A 1 320 4
1 A 2 169 6
2 B 1 120 3
Run Code Online (Sandbox Code Playgroud)
我想使用 number 和 add_number ,这样我就可以动态地分解它,即) 320 + 4 将有 [320,321,322,323,324] (最多 324,并且想在此分解)
期望的输出
id id_2 number
0 A 1 320
1 A 1 321
2 A 1 322
3 A 1 323
4 A 1 324
5 A 2 169
6 A 2 170
7 A 2 171
8 A 2 172
9 A 2 173
10 A 2 174
11 A 2 175
12 B 1 120
13 B 1 121
14 B 1 122
15 B 1 123
Run Code Online (Sandbox Code Playgroud)
我查看了explode、wide_to_long pandas 函数,但我不知道从哪里开始,任何方向感将不胜感激!
您尝试使用np.arangeand explode:
df['range'] = df.apply(lambda x: np.arange(x['number'], x['number']+x['add_number']+1), axis=1)
df.explode('range')
Run Code Online (Sandbox Code Playgroud)
或者
df['range'] = [np.arange(n, n+a+1) for n, a in zip(df['number'],df['add_number'])]
df.explode('range')
Run Code Online (Sandbox Code Playgroud)
输出:
id id_2 number add_number range
0 A 1 320 4 320
0 A 1 320 4 321
0 A 1 320 4 322
0 A 1 320 4 323
0 A 1 320 4 324
1 A 2 169 6 169
1 A 2 169 6 170
1 A 2 169 6 171
1 A 2 169 6 172
1 A 2 169 6 173
1 A 2 169 6 174
1 A 2 169 6 175
2 B 1 120 3 120
2 B 1 120 3 121
2 B 1 120 3 122
2 B 1 120 3 123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |