如何将差异行添加到每个索引值?

时间:2020-09-23 14:39:12

标签: python python-3.x pandas dataframe

我有一个看起来像这样的数据框:

Index_1 Index_2 Week_1 Week_2 Week_3
 0       A        1      2      3
         B        2      3      4
 1       A        4      5      6
         B        7      8      9

对于Index_1中的每个唯一值,我想向Index_2添加一行,称为“ Diff”,该行将计算Week_1,Week_2,Week_3等中的A和B之间的差。

请参见下文,希望它看起来像:

Index_1 Index_2 Week_1 Week_2 Week_3
 0       A        1      2      3
         B        2      3      4
         Diff     1      1      1
 1       A        4      5      6
         B        7      8      9
         Diff     3      3      3

4 个答案:

答案 0 :(得分:3)

另一种方法是stack/unstack

new_df = df.unstack(level=-1).stack(level=0)
new_df['Diff'] = new_df['B'] - new_df['A']
new_df = new_df.unstack(level=-1).stack(level=0)

输出:

                 Week_1  Week_2  Week_3
Index_1 Index_2                        
0       A             1       2       3
        B             2       3       4
        Diff          1       1       1
1       A             4       5       6
        B             7       8       9
        Diff          3       3       3

答案 1 :(得分:0)

对不起,我不会对此进行编码,但是我的建议是识别一些东西。
您正在两个5列宽和4行高的数组中显示多个值。 (或者一个7行高的数组),或者一个3维数组,以一种非常简洁和可识别的方式存储所有信息。这都是关于选择如何规范化数据的。
我的建议是将代码写入数组中的存储 Subtrahend Minuend 。 然后,编写代码以计算 差异并将其存储在数组中。 然后以您希望的方式将代码编写为 display 。 讲故事,对故事进行伪编码,然后在伪代码中编码。

答案 2 :(得分:0)

尝试一下:

diff = df.groupby('Index_1').diff().dropna().rename(index={'B': 'Diff'})
df = df.append(diff).sort_index()

结果:

                 Week_1  Week_2  Week_3
Index_1 Index_2                        
0       A           1.0     2.0     3.0
        B           2.0     3.0     4.0
        Diff        1.0     1.0     1.0
1       A           4.0     5.0     6.0
        B           7.0     8.0     9.0
        Diff        3.0     3.0     3.0

答案 3 :(得分:0)

字典如何处理

dict = {
    "dataframe":[
        {   
        "A":[1,2,3],
        "B":[2,3,4]
        },
        {   
        "A":[4,5,6],
        "B":[7,8,9]
        }
    ]
}

使用此代码:

for i in dict["dataframe"]:
    i["diff"] = []
    for weak in range(len(i["A"])):
        i["diff"].append(i["B"][weak]-i["A"][weak])

结果:

{
    "dataframe":[
        {   
        "A":[1,2,3],
        "B":[2,3,4],
        "diff":[1,1,1],
        },
        {   
        "A":[4,5,6],
        "B":[7,8,9],
        "diff":[3,3,3]
        }
    ]
}

我想这对于像我这样的新手来说更容易理解。