【发布时间】:2021-04-16 06:41:58
【问题描述】:
我有一个如下所示的 pandas 数据框。我试图以迭代方式从column A 中的值中减去值1,直到column B 中的值变为0。减法的顺序将通过使用列Sort1 和Sort2 进行排序来决定以升序方式,首先从 column A row 3 中减去 1,然后再从 column A row 4 中减去 1,最后从 column A 中减去 row 0
我需要对 B 列中存在的每个组分别执行此操作。
Inital DataFrame:
A B Sort1 Sort2
0 1 3 A 0.7
1 1 3 B 0.3
2 1 3 C 0.5
3 2 3 A 0.2
4 2 3 A 0.5
5 1 4 A 0.7
6 1 4 B 0.3
7 1 4 C 0.5
8 2 4 A 0.2
9 2 4 A 0.5
Result Dataframe:
A B Sort1 Sort2
0 0 0 A 0.7
1 1 0 B 0.3
2 1 0 C 0.5
3 1 0 A 0.2
4 1 0 A 0.5
5 0 0 A 0.7
6 0 0 B 0.3
7 1 0 C 0.5
8 1 0 A 0.2
9 1 0 A 0.5
我可以通过循环遍历数据框来实现这一点,但数据框可能很大,想探索是否有更好的方法来实现这一点?
【问题讨论】:
-
你不说
B列的值是如何变化的还是我遗漏了什么? -
基本上,由于 B 列中的值为 3,因此我以我在问题中提到的迭代方式从 A 列中减去 1 三次。希望能提供更多的清晰度。 @divingTobi
-
但是您也必须对列
B做一些事情,否则它不会从 3 变为所有条目的 1,不是吗?还是B列中的所有值始终相同,这基本上是您想要从A中运行减法的次数? -
是的。你说的对。 B 列中的值将始终相同。它基本上是为了跟踪减法需要发生多少次或是否需要发生。所以如果它是 0 基本上我就不需要再做减法了。
-
“迭代减法”与将减法数(在本例中为 -1)乘以 B 列中的值并减去该值不一样吗?所以不是-1,-1,-1,而是-3,应该快3倍。如果您想在低于零时停止减法,请将其写为下限减法函数并应用它。例如
lambda x,y : 0 if x<y else x-y已经定义了该函数,您可以将其作为对不需要循环的数据帧的单个调用来应用。