在数据帧中创建将基于条件和另一列的值的新列



我有以下数据框架:

data = {'X':[0,0,10,10,10,15,20,50,50,55,80,100,1500]}
df=pd.DataFrame(data)
df
X
0   0
1   0
2   10
3   10
4   10
5   15
6   20
7   50
8   50
9   55
10  80
11  100
12  1500

另外,我有这4个参数:

A_Bucket=10
B_Bucket=50
C_Bucket=100
D_Bucket=300

X→列运行。我想创建4个新列(A,B,C,D),这将基于X列和基于4个参数,通过以下逻辑:一个→将从X到A的数量相加将得到与A_Bucket相同的值。一旦它到达它,我们需要移动到下一列。B→将从X到B的数量相加将得到与B_Bucket相同的值。一旦它到达它,我们需要移动到下一列。C和D也一样。A、B、C、D的和应该总是小于或等于x。

输出应该像这样:


Index  X    A   B   C   D
1      0    0   0   0   0
2      0    0   0   0   0
3     10   10   0   0   0
4     10   10   0   0   0
5     10   10   0   0   0
6     15   10   5   0   0
7     20   10  10   0   0
8     50   10  40   0   0
9     50   10  40   0   0
10    55   10  45   0   0
11    80   10  50  20   0
12   100   10  50  40   0
13  1500   10  50 100   300

值得一提的是,这只是一个例子,我需要通过这个逻辑创建更多的列,所以我需要它尽可能有效。提前谢谢。

您可以使用where子句通过每次从X中减去当前值的总量来实现这一点。

df = df.set_index("X")
for x, y in zip("ABCD", [A_Bucket, B_Bucket, C_Bucket, D_Bucket]):
df[x] = (df.index-df.sum(1)).where((df.index-df.sum(1)).le(y), y)
print (df)
A     B      C      D
X                             
0      0.0   0.0    0.0    0.0
0      0.0   0.0    0.0    0.0
10    10.0   0.0    0.0    0.0
10    10.0   0.0    0.0    0.0
10    10.0   0.0    0.0    0.0
15    10.0   5.0    0.0    0.0
20    10.0  10.0    0.0    0.0
50    10.0  40.0    0.0    0.0
50    10.0  40.0    0.0    0.0
55    10.0  45.0    0.0    0.0
80    10.0  50.0   20.0    0.0
100   10.0  50.0   40.0    0.0
1500  10.0  50.0  100.0  300.0

相关内容

最新更新