首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蟒蛇生长因子的计算

蟒蛇生长因子的计算
EN

Stack Overflow用户
提问于 2020-04-28 15:43:01
回答 3查看 468关注 0票数 0

我有以下数据

代码语言:javascript
复制
Date           Country  Sales
01/02/20        France   1000
01/02/20        Germany  1000
02/02/20        France   2000
02/02/20        Germany  3000
03/02/20        France   4500
03/02/20        Germany  5000

我想按国家计算每天的增长因子。例如,德国02/02/20 = 3000/1000和03/02/2020的增长率应为5000/3000。不是在找百分比的变化。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-28 16:14:44

代码语言:javascript
复制
df = pd.DataFrame([
['01/02/20',        'France '  ,1000],
['01/02/20',        'Germany'  ,1000],
['02/02/20',        'France '  ,2000],
['02/02/20',        'Germany'  ,3000],
['03/02/20',        'France '  ,4500],
['03/02/20',        'Germany'  ,5000]
], columns=['Date', 'Country', 'Sales'])
df['Diff'] = df.groupby(['Country']).diff()
df['Growth'] = df.eval('Sales/(Sales - Diff)')
print(df)

另一种选择是如上所述。

代码语言:javascript
复制
       Date  Country  Sales    Diff    Growth
0  01/02/20  France    1000     NaN       NaN
1  01/02/20  Germany   1000     NaN       NaN
2  02/02/20  France    2000  1000.0  2.000000
3  02/02/20  Germany   3000  2000.0  3.000000
4  03/02/20  France    4500  2500.0  2.250000
5  03/02/20  Germany   5000  2000.0  1.666667
票数 1
EN

Stack Overflow用户

发布于 2020-04-28 16:12:55

从按国家进行排序开始:df = df.sort_values(['Country'])

然后设置一个过滤器,它只在索引与前面的索引相同(即它们来自同一个国家)时返回true:filter = df['Country'] == df['Country'].shift(1)

现在,在上面的过滤器为真的最后一点上计算分数变化:

df['Growth'] = df['Sales'].where(filter)/df['Sales'].shift(1)

最后,按指数计算:

df = df.sort_index()

在以下方面的成果:

代码语言:javascript
复制
       Date  Country  Sales     Growth
0  01/02/20   France   1000         NaN
1  01/02/20  Germany   1000         NaN
2  02/02/20   France   2000    2.000000
3  02/02/20  Germany   3000    3.000000
4  03/02/20   France   4500    2.250000
5  03/02/20  Germany   5000    1.666667
票数 0
EN

Stack Overflow用户

发布于 2020-04-28 17:18:16

使用:

代码语言:javascript
复制
df["Growth Factor"] = df.groupby(
    "Country")["Sales"].transform(lambda g: g / g.shift())
print(df)

这些指纹:

代码语言:javascript
复制
       Date  Country  Sales  Growth Factor
0  01/02/20   France   1000            NaN
1  01/02/20  Germany   1000            NaN
2  02/02/20   France   2000       2.000000
3  02/02/20  Germany   3000       3.000000
4  03/02/20   France   4500       2.250000
5  03/02/20  Germany   5000       1.666667
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61484241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档