如何解决如何遍历数据框的列?
我想查看数据框的所有列。以便我将获得该列的特定数据,使用这些数据我必须为另一个数据框计算。 我在这里:
DP1 DP2 DP3 DP4 DP5 DP6 DP7 DP8 DP9 DP10 Total
OP1 357848.0 1124788.0 1735330.0 2218270.0 2745596.0 3319994.0 3466336.0 3606286.0 3833515.0 3901463.0 3901463.0
OP2 352118.0 1236139.0 2170033.0 3353322.0 3799067.0 4120063.0 4647867.0 4914039.0 5339085.0 NaN 5339085.0
OP3 290507.0 1292306.0 2218525.0 3235179.0 3985995.0 4132918.0 4628910.0 4909315.0 NaN NaN 4909315.0
OP4 310608.0 1418858.0 2195047.0 3757447.0 4029929.0 4381982.0 4588268.0 NaN NaN NaN 4588268.0
OP5 443160.0 1136350.0 2128333.0 2897821.0 3402672.0 3873311.0 NaN NaN NaN NaN 3873311.0
OP6 396132.0 1333217.0 2180715.0 2985752.0 3691712.0 NaN NaN NaN NaN NaN 3691712.0
OP7 440832.0 1288463.0 2419861.0 3483130.0 NaN NaN NaN NaN NaN NaN 3483130.0
OP8 359480.0 1421128.0 2864498.0 NaN NaN NaN NaN NaN NaN NaN 2864498.0
OP9 376686.0 1363294.0 NaN NaN NaN NaN NaN NaN NaN NaN 1363294.0
OP10 344014.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN 344014.0
Total 3671385.0 11614543.0 17912342.0 21930921.0 21654971.0 19828268.0 17331381.0 13429640.0 9172600.0 3901463.0 34358090.0
Latest Observation 344014.0 1363294.0 2864498.0 3483130.0 3691712.0 3873311.0 4588268.0 4909315.0 5339085.0 3901463.0 NaN
从这个表中我想计算这个公式:在列 DP1,总计/上次观察中,这个答案是除以 DP2 列总数。像这样,我们必须计算所有列并将其保存在另一个数据框中。
我们需要这样的行:
Weighted Average 3.491 1.747 1.457 1.174 1.104 1.086 1.054 1.077 1.018
我们试过的这段代码:
LDFTriangledf['Weighted Average'] =CumulativePaidTriangledf.loc['Total','DP2']/(CumulativePaidTriangledf.loc['Total','DP1'] - CumulativePaidTriangledf.loc['Latest Observation','DP1'])
解决方法
您可以从 .loc
中删除列名,然后只删除 shift(-1,axis=1)
以获得下一列的 Total
。这使您可以在一次操作中将公式应用于所有列:
CumulativePaidTriangledf.shift(-1,axis=1).loc['Total'] / (CumulativePaidTriangledf.loc['Total'] - CumulativePaidTriangledf.loc['Latest Observation'])
# DP1 3.490607
# DP2 1.747333
# DP3 1.457413
# DP4 1.173852
# DP5 1.103824
# DP6 1.086269
# DP7 1.053874
# DP8 1.076555
# DP9 1.017725
# DP10 inf
# Total NaN
# dtype: float64
以下是三个组件的作用细分:
DP1 | DP2 | DP3 | DP4 | DP5 | DP6 | DP7 | DP8 | DP9 | DP10 | 总计 | |
---|---|---|---|---|---|---|---|---|---|---|---|
A: .shift(-1,axis=1).loc['Total'] -- 我们将整个 Total 行向左移动,所以现在每一列都有下一个 Total 值。 |
1.161454e+07 | 1.791234e+07 | 2.193092e+07 | 2.165497e+07 | 1.982827e+07 | 1.733138e+07 | 1.342964e+07 | 9.172600e+06 | 3.901463e+06 | 34358090.0 | NaN |
B: .loc['Total'] -- 这是正常的 Total 行。 |
3.671385e+06 | 1.161454e+07 | 1.791234e+07 | 2.193092e+07 | 2.165497e+07 | 1.982827e+07 | 1.733138e+07 | 1.342964e+07 | 9.172600e+06 | 3901463.0 | 34358090.0 |
C: .loc['Latest Observation'] -- 这是正常的 Latest Observation 。 |
3.440140e+05 | 1.363294e+06 | 2.864498e+06 | 3.483130e+06 | 3.691712e+06 | 3.873311e+06 | 4.588268e+06 | 4.909315e+06 | 5.339085e+06 | 3901463.0 | NaN |
A / (B-C) -- 这就是上面的代码所做的。它采用移动后的 Total 行 (A) 并将其除以当前 Total 行 (B) 和当前 Latest observation 行 (C) 的差值。 |
3.490607 | 1.747333 | 1.457413 | 1.173852 | 1.103824 | 1.086269 | 1.053874 | 1.076555 | 1.017725 | inf | NaN |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。