gpt4 book ai didi

python - 在 Pandas 中创建类似 Excel 的 SUMIFS

转载 作者:太空狗 更新时间:2023-10-30 00:41:33 25 4
gpt4 key购买 nike

我最近了解了 pandas,很高兴看到它的分析功能。我正在尝试将 Excel 数组函数转换为 Pandas 等同于自动化我为创建绩效归因报告而创建的电子表格。在此示例中,我根据其他列中的条件在 Excel 中创建了一个新列:

={SUMIFS($F$10:$F$4518,$A$10:$A$4518,$C$4,$B$10:$B$4518,0,$C$10:$C$4518," ",$D$10:$D$4518,$D10,$E$10:$E$4518,$E10)}

该公式是根据特定条件对“F”数组​​(证券权重)中的值求和。 “A”数组(投资组合ID)是某个数字,“B”数组(证券ID)是零,“C”数组(组描述)是“”,“D”数组(开始日期)是行的日期我所在的行,“E”数组(结束日期)是我所在行的日期。

在 Pandas 中,我使用的是 DataFrame。在具有前三个条件的数据框上创建一个新列很简单,但我在后两个条件上遇到了困难。

reportAggregateDF['PORT_WEIGHT'] = reportAggregateDF['SEC_WEIGHT_RATE']
[(reportAggregateDF['PORT_ID'] == portID) &
(reportAggregateDF['SEC_ID'] == 0) &
(reportAggregateDF['GROUP_LIST'] == " ") &
(reportAggregateDF['START_DATE'] == reportAggregateDF['START_DATE'].ix[:]) &
(reportAggregateDF['END_DATE'] == reportAggregateDF['END_DATE'].ix[:])].sum()

很明显,最后两个条件中的 .ix[:] 对我没有任何作用,但是有没有办法在不循环的情况下以我所在的行为条件求和?我的目标是不做任何循环,而是使用纯向量操作。

最佳答案

您想使用 apply 函数和一个 lambda:

>> df
A B C D E
0 mitfx 0 200 300 0.25
1 gs 1 150 320 0.35
2 duk 1 5 2 0.45
3 bmo 1 145 65 0.65

假设我想对 C 列乘以 E 求和,但前提是 B 列 == 1 且 D 大于 5:

df['matches'] = df.apply(lambda x: x['C'] * x['E'] if x['B'] == 1 and x['D'] > 5 else 0, axis=1)
df.matches.sum()

将其分成两步可能更简洁:

df_subset = df[(df.B == 1) & (df.D > 5)]
df_subset.apply(lambda x: x.C * x.E, axis=1).sum()

或者使用简单的乘法来提高速度:

df_subset = df[(df.B == 1) & (df.D > 5)]
print sum(df_subset.C * df_subset.E)

你想在没有循环的情况下做这道题是完全正确的。

关于python - 在 Pandas 中创建类似 Excel 的 SUMIFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com