我有一个这样的熊猫数据框:
id alt amount
6 b 30
6 a 30
3 d 56
3 a 40
1 c 35
1 b 10
1 a 20
我想变成这样:
id alt amount
6 d 56
6 c 35
6 b 30
6 a 30
5 d 56
5 c 35
5 b 26
5 a 33.33
4 d 56
4 c 35
4 b 22
4 a 36.66
3 d 56
3 c 35
3 b 18
3 a 40
2 c 35
2 b 14
2 a 30
1 c 35
1 b 10
1 a 20
对于每个小于最大ID号的丢失ID号N,应复制小于N的最大ID号的所有alt值,对于这些重复的行,将id号设置为N。如果对更大的id编号重复alt值,则附加项输入应增加除以id值之间的差(步数)。如果不重复alt值,则可以简单地复制该数量为每个附加ID值结束。
例如,出现一个ID为1、3和6的ID,数量分别为20、40、30。我们需要添加一个id为2的a实例。该数量为30,因为从1到3需要2步,而我们要增加20。从3到6则有3步,我们将减少10。-10/3 = -3.33,因此我们为a的每个新实例减去3.33。
我想将复制,排序和正向填充进行某种组合?我不确定这里的逻辑。
答案 0 :(得分:1)
您可以先使用pivot
+ reindex
然后使用interpolate
yourdf=df.pivot(*df.columns).\
reindex(range(df.id.min(),df.id.max()+1)).\
interpolate(method='index').stack().reset_index()
yourdf
Out[51]:
id alt 0
0 1 a 20.000000
1 1 b 10.000000
2 1 c 35.000000
3 2 a 30.000000
4 2 b 14.000000
5 2 c 35.000000
6 3 a 40.000000
7 3 b 18.000000
8 3 c 35.000000
9 3 d 56.000000
10 4 a 36.666667
11 4 b 22.000000
12 4 c 35.000000
13 4 d 56.000000
14 5 a 33.333333
15 5 b 26.000000
16 5 c 35.000000
17 5 d 56.000000
18 6 a 30.000000
19 6 b 30.000000
20 6 c 35.000000
21 6 d 56.000000