簡體   English   中英

在pandas中使用groupby和transform時保留“key”列

[英]Keeping 'key' column when using groupby with transform in pandas

查找規范化數據幀會刪除用於分組的列,因此無法在后續的分組操作中使用它。 例如(編輯:更新):

    df = pd.DataFrame({'a':[1, 1 , 2, 3, 2, 3], 'b':[0, 1, 2, 3, 4, 5]})

       a  b
    0  1  0
    1  1  1
    2  2  2
    3  3  3
    4  2  4
    5  3  5

    df.groupby('a').transform(lambda x: x)

       b
    0  0
    1  1
    2  2
    3  3
    4  4
    5  5

現在,對於組上的大多數操作,“缺失”列成為一個新索引(然后可以使用reset_index進行調整,或設置as_index=False ),但是當使用轉換時,它就會消失,留下原始索引和一個沒有鍵。

編輯:這是我希望能夠做的一個班輪

    df.groupby('a').transform(lambda x: x+1).groupby('a').mean()
    KeyError 'a'

pandas 文檔的示例中,使用一個函數根據索引進行拆分,這似乎完全避免了這個問題。 或者,總是可以在 groupby/transform 之后添加列,但肯定有更好的方法嗎?

更新:看起來 reset_index/as_index 僅適用於將每個組減少到單行的函數。 似乎有幾個選項,從答案

這個問題也在這里討論。

返回的對象與原始 df 具有相同的索引,因此您可以執行

pd.concat([
    df['a'],
    df.groupby('a').transform(lambda x: x)
], axis=1)

太奇怪了!

我是這樣騙的

df.groupby(df.a.values).transform(lambda x: x)

在此處輸入圖片說明

另一種實現類似於 Pepacz 建議的方法:

df.loc[:, df.columns.drop('a')] = df.groupby('a').transform(lambda x: x)

試試這個:

df['b'] = df.groupby('a').transform(lambda x: x)
df.drop_duplicates()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM