当apply返回一个数据框时,如何获得pandas groupby-apply返回索引?

时间:2019-02-26 13:18:40

标签: pandas pandas-groupby pandas-apply

在熊猫中使用groupby-apply时,输出的索引似乎取决于apply函数返回pd.DataFrame还是pd.Series。理想情况下,我希望我的apply函数返回一个pd.DataFrame,并且apply的结果是一个多索引,当结果为pd.Series时,是否有办法实现? / p>

一个最小的例子:

import numpy as np
import pandas as pd

data = np.array([np.random.randint(1, 3, 10, dtype=int),
                 np.random.randint(1, 4, 10, dtype=int),
                 np.random.random(10),
                 np.random.random(10)]).T

df = pd.DataFrame(data=data, columns=['A', 'B', 'x', 'y'])
grouped = df.groupby(['A', 'B'])

print(grouped.apply(lambda g: g['x'].diff()))
print(grouped.apply(lambda g: g[['x', 'y']].diff()))

输出:

A    B     
1.0  1.0  5         NaN
          8   -0.093603
     2.0  1         NaN
     3.0  2         NaN
          9   -0.399529
2.0  1.0  3         NaN
     2.0  0         NaN
          7   -0.510983
     3.0  4         NaN
          6    0.175588
Name: x, dtype: float64
          x         y
0       NaN       NaN
1       NaN       NaN
2       NaN       NaN
3       NaN       NaN
4       NaN       NaN
5       NaN       NaN
6  0.175588  0.155579
7 -0.510983  0.483819
8 -0.093603  0.465513
9 -0.399529 -0.203326

我可以考虑一些解决方法,但是我希望听到一些方法来告诉应用程序维护索引。

编辑:一种解决方法可能并不像我想的那样糟糕:

pd.concat([grouped.apply(lambda g: g[col].diff()) for col in ['x', 'y']], axis=1)

0 个答案:

没有答案