1

我有一个在数据帧上运行的函数 foo;特别是数据框的两列。所以像,

def foo(group):
  A = group['A']
  B = group['B']
  r1 = somethingfancy(A,B) #this is now a float
  r2 = somethinggreat(A,B) #this is another float
  return {'fancy':r1,'great':r2}

问题是我想在以下情况下使用此功能:

grouped = otherDF[['someAttribute','A','B']].groupby(['someAttribute'])
agg = grouped.apply(foo)

问题是 agg 现在是一系列 DICT。我想将其转换为基本上看起来像这样的数据框:

someAttribute, fancy, great
...          , ...  , ...
4

1 回答 1

2

而不是返回 a dict,而是返回 a Series

def foo(group):
    A = group['A']
    B = group['B']
    r1 = randn()
    r2 = randn()
    return Series({'fancy': r1, 'great': r2})

df = DataFrame(randn(10, 1), columns=['a'])
df['B'] = np.random.choice(['hot', 'cold'], size=10)
df['A'] = np.random.choice(['sweet', 'sour'], size=10)
df['someAttribute'] = np.random.choice(['pretty', 'ugly'], size=10)
print df.groupby('someAttribute').apply(foo)

                   fancy      great
someAttribute                      
pretty             -2.35       0.01
ugly                1.09      -1.09

如果您想someAttribute成为结果中的一列,请调用reset_index结果:

df.groupby('someAttribute').apply(foo).reset_index()

要得到:

  someAttribute      fancy      great
0        pretty       0.46      -1.08
1          ugly       0.76       0.29
于 2013-08-27T23:02:53.477 回答