簡體   English   中英

groupby 聚合無法按預期對 Pandas 工作

[英]groupby aggregate does not work as expected for Pandas

我需要一些關於聚合和加入數據幀 groupby 輸出的幫助。

這是我的數據框:

    df = pd.DataFrame({
    'Date': ['2020/08/18','2020/08/18', '2020/08/18', '2020/08/18', '2020/08/18', '2020/08/18', '2020/08/18'],
    'Time':['Val3',60,30,'Val2',60,60,'Val2'],
    'Val1': [0, 53.5, 33.35, 0,53.5, 53.5,0],
    'Val2':[0, 0, 0, 45, 0, 0, 35],
    'Val3':[48.5,0,0,0,0,0,0],
    'Place':['LOC_A','LOC_A','LOC_A','LOC_B','LOC_B','LOC_B','LOC_A']
})

我想要以下結果:

   Place  Total_sum  Factor  Val2_new
0  LOC_A      86.85   21.71       35
1  LOC_B     107.00   26.75       45

我試過以下:

df_by_place = df.groupby('Place')['Val1'].sum().reset_index(name='Total_sum')
df_by_place['Factor'] = round(df_by_place['Total_sum']*0.25, 2)
df_by_place['Val2_new'] = df.groupby('Place')['Val2'].agg('sum')
print(df_by_place)

但我得到以下結果:

   Place  Total_sum  Factor  Val2_new
0  LOC_A      86.85   21.71       NaN
1  LOC_B     107.00   26.75       NaN

當我自己進行以下操作時:

print(df.groupby('Place')['Val2'].agg('sum'))
Output is desired:
Place
LOC_A    35
LOC_B    45

但是當我分配給一列時,它給出了“NaN”值。

對此問題的任何幫助將不勝感激。

先感謝您。

pandas >= 0.25 中的 Groupby 將允許您為其中的列分配名稱,並一次性完成您想做的事情。

df.groupby('Place').agg(Total_sum = ('Val1','sum'),
                        Factor = ('Val1', lambda x: round((x * 0.25).sum(),2)),
                        Val2_new = ('Val2', 'sum')).reset_index() 

這提供了您想要的結果。

    Place   Total_sum   Factor  Val2_new
0   LOC_A   86.85       21.71   35
1   LOC_B   107.00      26.75   45

在 groupby 中使用 lambda 函數會讓事情變得更整潔!

sushanth 給出的答案似乎是正確的。

df_by_place['Val2_new'] = df.groupby('Place')['Val2'].agg('sum').reset_index(drop=True)

通過在 reset_index 中分配 drop = True,先前創建的索引將被刪除,並分配用戶給定的新索引/列名。

@maishm 的回答略有不同,但基本相同:

df.groupby('Place').agg(total_sum=pd.NamedAgg(column='Val1', aggfunc=sum), 
                        factor=pd.NamedAgg(column='Val1', aggfunc=lambda x: round(sum(x)*0.25,2)), 
                        val2_new=pd.NamedAgg(column='Val2', aggfunc=sum)).reset_index()

輸出:

   Place  total_sum  factor  val2_new
0  LOC_A      86.85   21.71        35
1  LOC_B     107.00   26.75        45

暫無
暫無

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

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