在 VBA (Excel) 中,大多数算法必须以循环方式完成。例如,我们要查找列 ("A") 为 "x" 的所有行,然后将列 ("A") 为 "y" 的行中的值添加到该行中的另一列。如何解决熊猫中的特定问题?概括地说:我想遍历 DataFrame 的每一行,并使用它的值作为标准,从同一个 DataFrame 中选择另一行,并对这些行中的值进行一些数学运算。在一个现实生活中的例子:Sub SomeCode()Dim vArr As VariantDim i As Integer, j As IntegervArr = SelectionFor i = LBound(vArr) + 1 To UBound(vArr) If vArr(i, 2) = "S1" Then If vArr(i, 8) >= "2019-13" Then If vArr(i, 7) = "Chat" Or vArr(i, 7) = "Email" Then For j = LBound(vArr) + 1 To UBound(vArr) If vArr(j, 2) = "S1" And vArr(j, 8) = vArr(i, 8) And vArr(j, 6) = vArr(i, 6) Then If vArr(j, 7) = "Phone" Then vArr(j, 9) = vArr(j, 9) + vArr(i, 9) * 0.05 ElseIf vArr(j, 7) = "SMS" Then vArr(j, 9) = vArr(j, 9) + vArr(i, 9) * 0.95 End If End If Next j vArr(i, 9) = 0 End If End If End IfNext iSelection = vArrEnd Sub数据集是这样的:ID Country Version Partner SOME Location Site Channel Weeknum contacts 1099 UK OP1 0 0 0 0 Email 2019-08 -311242 UK OP1 0 0 0 0 Phone 2019-47 -491599 UK OP1 0 0 0 1 SMS 2019-40 01817 UK OP1 1 1 1 2 SMS 2019-50 02539 UK OP1 0 0 0 3 Chat 2019-44 943889 UK OP1 0 0 0 4 SMS 2019-42 0
2 回答

Smart猫小萌
TA贡献1911条经验 获得超7个赞
在pandas
你可以做行的多重条件选择布尔索引。
例如,这里是您的 VBA 代码中的一些条件,以pandas
方式完成:
df[((df['Version'] == 'S1') & (df['Weeknum'] == '2019-13'))]
然后,您可以将它与.loc
运算符结合起来对选定的行执行数学运算:
df.loc[[((df['Version'] == 'S1') & (df['Weeknum'] == '2019-13')), 'contacts'] = df['contacts'] + df['contacts'] * 0.05
注意:这是一个示例,而不是您完整的改编代码。请调整其余部分,了解熊猫的这些基础知识:)

翻过高山走不出你
TA贡献1875条经验 获得超3个赞
行选择可以很容易地在 Pandas 中完成,例如使用:
dfAx = df[df.A == x]
这将选择 A 列中的值等于 x 的所有行。我并不完全清楚你的意思是“然后将列(“A”)为“y”的行中的值添加到该行的另一列中。但是,例如,您可以只选择列(“A”)的值等于 y 的所有行,如下所示:
dfAy = df[df.A == y]
之后,您可以对两个数据帧执行操作。
添加回答
举报
0/150
提交
取消