我有一个带有Multindex(id和datetime)的熊猫数据框,以及一个名为X1的列。

                                X1
id          datetime
a1ssjdldf   2019 Jul 10          2
            2019 Jul 11         22
            2019 Jul 12         21
r2dffs      2019 Jul 10         14
            2019 Jul 11         13
            2019 Jul 12         11


我想创建一个新变量X2,其中相应的值是同一行的X1值和上一行的X1值之间的差。但是,每次看到新的ID时,都必须从零重新开始相应的值。

例如:

                                X1          X2
id          datetime
a1ssjdldf   2019 Jul 10          2           0
            2019 Jul 11         22          20
            2019 Jul 12         21          -1
r2dffs      2019 Jul 10         14           0
            2019 Jul 11         13          -1
            2019 Jul 12         11          -2

最佳答案

在第一级使用DataFrameGroupBy.diff并用Series.fillna替换缺少的值:

df['X2'] = df.groupby(level=0)['X1'].diff().fillna(0, downcast='int')
print (df)
                       X1  X2
id        datetime
a1ssjdldf 2019 Jul 10   2   0
          2019 Jul 11  22  20
          2019 Jul 12  21  -1
r2dffs    2019 Jul 10  14   0
          2019 Jul 11  13  -1
          2019 Jul 12  11  -2

关于python - Pandas Multiindex:迭代行并添加特定值以创建新变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56969853/

10-12 03:25