我用我的數據框df
其中有列type
,subtype
,和11人大熊貓groupby
。然後我打電話跟我combine_function
的組(需要一個更好的名字)像apply
:熊貓GROUPBY應用功能,結合了某些羣體,但不是別人
grouped = df('type')
reduced = grouped.apply(combine_function)
在我的combine_function
檢查該組中的任何元素包含給定亞型的任何元素,比如說1,和看起來像:
def combine_function(group):
if 1 in group.subtype:
return aggregate_function(group)
else:
return group
的combine_function
然後可以調用一個aggregate_function
,計算彙總統計,並將其存儲在第一行,然後設置該行是小組。它看起來像:
def aggregate_function(group):
first = group.first_valid_index()
group.value1[group.index == first] = group.value1.mean()
group.value2[group.index == first] = group.value2.max()
group.value3[group.index == first] = group.value3.std()
group = group[(group.index == first)]
return group
我相當肯定這是不是要做到這一點的最好辦法,但它一直給我所期望的結果中,99.9%的時間上千種DataFrames的。然而,它有時拋出以某種方式有關,我不想聚集一團的誤差都只有2行:
ValueError: Shape of passed values is (13,), indices imply (13, 5)
在我的例子組有大小:
In [4]: grouped.size()
Out[4]:
type
1 9288
3 7667
5 7604
11 2
dtype: int64
它處理三三罰款,然後當它試圖把所有的東西結合起來的時候出現了錯誤。如果我註釋掉group = group[(group.index == first)]
那麼更新但不彙總或在所有組上調用我的aggregate_function
它很好。
有誰知道正確的方式來做這種聚合的一些羣體,而不是其他人?
您是否嘗試過使用apply? –