为了账号安全,请及时绑定邮箱和手机立即绑定

DataFrame - 带标准的行式算术

DataFrame - 带标准的行式算术

万千封印 2021-06-07 17:31:48
在 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

注意:这是一个示例,而不是您完整的改编代码。请调整其余部分,了解熊猫的这些基础知识:)


查看完整回答
反对 回复 2021-06-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

行选择可以很容易地在 Pandas 中完成,例如使用:

dfAx = df[df.A == x]

这将选择 A 列中的值等于 x 的所有行。我并不完全清楚你的意思是“然后将列(“A”)为“y”的行中的值添加到该行的另一列中。但是,例如,您可以只选择列(“A”)的值等于 y 的所有行,如下所示:

dfAy = df[df.A == y]

之后,您可以对两个数据帧执行操作。


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号