팬더 시리즈의 K 요소의 그룹에 기능을 적용나는 팬더 시리즈가
0 1
1 5
2 20
3 -1
내가 모든 두 가지 요소에 mean()
을 적용 할 말할 수 있습니다를, 그래서 나는 이런 식으로 뭔가 얻을 :
0 3.0
1 9.5
을
우아한 방법이 있나요?
팬더 시리즈의 K 요소의 그룹에 기능을 적용나는 팬더 시리즈가
0 1
1 5
2 20
3 -1
내가 모든 두 가지 요소에 mean()
을 적용 할 말할 수 있습니다를, 그래서 나는 이런 식으로 뭔가 얻을 :
0 3.0
1 9.5
을
우아한 방법이 있나요?
당신은 k=2
에 의해 index
분할에 의해 groupby
를 사용할 수 있습니다
k = 2
print (s.index // k)
Int64Index([0, 0, 1, 1], dtype='int64')
print (s.groupby([s.index // k]).mean())
name
0 3.0
1 9.5
고마워요! k가 시리즈의 길이를 나눈 경우를 다루는 방법이 있습니까? 나는 시도했다 : (s [-m :]. index // k) k가 m을 나눌 때, 그러나 작동하지 않았다. –
나는 그것을 잡을 것이라고 생각한다. 하지만 당신은 먼저'reset_index' -'s = s [-m :]. reset_index (drop = True)'그리고'print (s.groupby ([s.index // k]). – jezrael
그래, 알았어 [(s.index + (k - (len (s) % k)) % k)) // k] –
당신이 큰 시리즈 여러 번에 걸쳐이를 사용하는 경우, 당신은 빠른 접근 방식을 고려할 수 있습니다. 이 솔루션은 모든 numpy 함수를 사용하며 빠릅니다.
사용 reshape
및 구성의 새로운 pd.Series
는 pd.Series
s
s = pd.Series([1, 5, 20, -1])
일반화 된 기능을 고려
def mean_k(s, k):
pad = (k - s.shape[0] % k) % k
nan = np.repeat(np.nan, pad)
val = np.concatenate([s.values, nan])
return pd.Series(np.nanmean(val.reshape(-1, k), axis=1))
데모
mean_k(s, 2)
0 3.0
1 9.5
dtype: float64
mean_k(s, 3)
0 8.666667
1 -1.000000
dtype: float64
당신은이 작업을 수행 할 수 있습니다
(s.iloc[::2].values + s.iloc[1::2])/2
을 당신도 나중에 인덱스를 재설정 할 수 있습니다 원하는 경우, 0을 그래서 1로 색인을 사용하여 :
((s.iloc[::2].values + s.iloc[1::2])/2).reset_index(drop=True)
내 나쁜, 조금 너무 빨랐다;) – Skirrebattie
이것은 k = 2 경우에 효과적이지만 많은 k의 경우이 작업을 수행하고 싶습니다. –
Mmmm은 여전히 가능해야하지만, 나는 그것에 대해 조금 생각합니다. :) – Skirrebattie
내 게시물을 업데이트했습니다. – piRSquared