猿问

与另一个 csv、pandas 上的操作(聚合最大值)相对应的 csv 值

我有两个表用于平均值和标准差,我想计算平均值表的某些列的最大值,并且我想获取标准表的相应行。


mean_df = pd.read_csv(r'./csvs/mean.csv')


std_df = pd.read_csv(r'./csvs/std.csv')


#mean_df, std_df are of same size


grouped_df = mean_df.groupby(['alpha', 'beta'])


columns = ['val']

max_df = grouped_df[columns].agg(['max'])


# Here i want the corresponding std_max_df table for the max_df. i.e., for every max calculated from mean, i want the std of that max in a new table.

例如:


输入mean_df是


αβ伽马陷阱


1 2 3 100


4 6 8 200


1 2 9 400


4 6 7 500


3 5 8 600


输入std_df 是


αβ伽马陷阱


1 2 3 300


4 6 8 500


1 2 9 100


4 6 7 700


3 5 8 900


输出将是


alpha beta gamma max_mean_val corresp_std_val


1 2 9 400 100


4 6 7 500 700


3 5 8 600 900


交互式爱情
浏览 95回答 1
1回答

幕布斯7119047

首先通过内连接或左连接将 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_std2      1     2      9       400      1004      3     5      8       600      9003      4     6      7       500      700对于多列,一种可能的想法是:print (mean_df)   alpha  beta  gamma  val  val10      1     2      3  100     51      4     6      8  200     92      1     2      9  400     33      4     6      7  500     54      3     5      8  600     2print (std_df)   alpha  beta  gamma  val  val10      1     2      3  300     51      4     6      8  500     72      1     2      9  100     93      4     6      7  700     24      3     5      8  900     1df = 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_std0      1     2      3       400      100          5         51      4     6      8       600      900          2         12      3     5      8       500      700          9         7
随时随地看视频慕课网APP

相关分类

Python
我要回答