1 回答

TA貢獻1794條經(jīng)驗 獲得超8個贊
首先通過內(nèi)連接或左連接將 DataFrame 合并在一起,然后通過以下方式獲取具有最大索引值的行DataFrameGroupBy.idxmax
:
df = mean_df.merge(std_df, on=['alpha', 'beta','gamma'],?
? ? ? ? ? ? ? ? ? ? ? ? ? ?how='left',?
? ? ? ? ? ? ? ? ? ? ? ? ? ?suffixes=('_mean','_std'))
df = df.loc[df.groupby(['alpha', 'beta'])['val_mean'].idxmax()]
print (df)
? ?alpha? beta? gamma? val_mean? val_std
2? ? ? 1? ? ?2? ? ? 9? ? ? ?400? ? ? 100
4? ? ? 3? ? ?5? ? ? 8? ? ? ?600? ? ? 900
3? ? ? 4? ? ?6? ? ? 7? ? ? ?500? ? ? 700
對于多列,一種可能的想法是:
print (mean_df)
? ?alpha? beta? gamma? val? val1
0? ? ? 1? ? ?2? ? ? 3? 100? ? ?5
1? ? ? 4? ? ?6? ? ? 8? 200? ? ?9
2? ? ? 1? ? ?2? ? ? 9? 400? ? ?3
3? ? ? 4? ? ?6? ? ? 7? 500? ? ?5
4? ? ? 3? ? ?5? ? ? 8? 600? ? ?2
print (std_df)
? ?alpha? beta? gamma? val? val1
0? ? ? 1? ? ?2? ? ? 3? 300? ? ?5
1? ? ? 4? ? ?6? ? ? 8? 500? ? ?7
2? ? ? 1? ? ?2? ? ? 9? 100? ? ?9
3? ? ? 4? ? ?6? ? ? 7? 700? ? ?2
4? ? ? 3? ? ?5? ? ? 8? 900? ? ?1
df = mean_df.merge(std_df, on=['alpha', 'beta','gamma'],?
? ? ? ? ? ? ? ? ? ? ? ? ? ?how='left',?
? ? ? ? ? ? ? ? ? ? ? ? ? ?suffixes=('_mean','_std'))
cols = ['val','val1']
dfs = [df.loc[df.groupby(['alpha', 'beta'])[f'{col}_mean'].idxmax(),?
? ? ? ? ? ? ? [f'{col}_mean', f'{col}_std']].reset_index(drop=True) for col in cols]
df0 = df[['alpha', 'beta','gamma']].drop_duplicates(['alpha','beta']).reset_index(drop=True)
df = pd.concat([df0] + dfs, axis=1)
print (df)
? ?alpha? beta? gamma? val_mean? val_std? val1_mean? val1_std
0? ? ? 1? ? ?2? ? ? 3? ? ? ?400? ? ? 100? ? ? ? ? 5? ? ? ? ?5
1? ? ? 4? ? ?6? ? ? 8? ? ? ?600? ? ? 900? ? ? ? ? 2? ? ? ? ?1
2? ? ? 3? ? ?5? ? ? 8? ? ? ?500? ? ? 700? ? ? ? ? 9? ? ? ? ?7
添加回答
舉報