猿问

使用 Pandas 计算增量列

我有一个如下所示的数据框:


 Name Variable Field

A   2.3 412

A   2.9 861

A   3.5 1703

B   3.5 1731

A   4.0 2609

B   4.0 2539

A   4.6 2821

B   4.6 2779

A   5.2 3048

B   5.2 2979

A   5.8 3368

B   5.8 3216

如您所见,“变量”列有重复的值。我想计算 A 和 B 之间每个变量的增量 (%)。然后我想生成的数据帧是:


    Name  Variable  Field   Ref field (A)   Delta (A - B)

    A   2.3 412     412     0.0%

    A   2.9 861     861     0.0%

    A   3.5 1703    1703    0.0%

    B   3.5 1731    1703    -1.6%

    A   4.0 2609    2609    0.0%

    B   4.0 2539    2609    2.8%

    A   4.6 2821    2821    0.0%

    B   4.6 2779    2821    1.5%

    A   5.2 3048    3048    0.0%

    B   5.2 2979    3048    2.3%

    A   5.8 3368    3368    0.0%

    B   5.8 3216    3368    4.7%

我已经用熊猫尝试了一些东西,比如:


df["Ref field (A)"] = df.apply(lambda row:df[(df["Variable"] == row["Variable"]) & (df["Name"] == "A")]["Field"][0],axis=1)

但这不起作用...:


    File "pandas/_libs/index.pyx", line 106, in pandas._libs.index.IndexEngine.get_value

    File "pandas/_libs/index.pyx", line 114, in pandas._libs.index.IndexEngine.get_value

    File "pandas/_libs/index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc

    File "pandas/_libs/hashtable_class_helper.pxi", line 958, in pandas._libs.hashtable.Int64HashTable.get_item

    File "pandas/_libs/hashtable_class_helper.pxi", line 964, in pandas._libs.hashtable.Int64HashTable.get_item

    KeyError: (0, u'occurred at index 0')   

有什么简单可行的想法吗?谢谢


潇潇雨雨
浏览 292回答 1
1回答

富国沪深

每组只有一个'A'值'Variable',创建一个Series并映射这些值以获取引用。s = df[df.Name.eq('A')].set_index('Variable').Fielddf['RefA'] = df.Variable.map(s)df['Delta'] = (df.RefA - df.Field)/df.Field*100输出:(在唯一的B组和C组的末尾添加一行)   Name  Variable  Field    RefA     Delta0     A       2.3    412   412.0  0.0000001     A       2.9    861   861.0  0.0000002     A       3.5   1703  1703.0  0.0000003     B       3.5   1731  1703.0 -1.6175624     C       3.5   1761  1703.0 -3.2935835     A       4.0   2609  2609.0  0.0000006     B       4.0   2539  2609.0  2.7569917     A       4.6   2821  2821.0  0.0000008     B       4.6   2779  2821.0  1.5113359     A       5.2   3048  3048.0  0.00000010    B       5.2   2979  3048.0  2.31621311    A       5.8   3368  3368.0  0.00000012    B       5.8   3216  3368.0  4.72636813    B       6.5   1231     NaN       NaN
随时随地看视频慕课网APP

相关分类

Python
我要回答