为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2023-09-05 15:10:12
我有两个表用于平均值和标准差,我想计算平均值表的某些列的最大值,并且我想获取标准表的相应行。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 sizegrouped_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 1004 6 8 2001 2 9 4004 6 7 5003 5 8 600输入std_df 是αβ伽马陷阱1 2 3 3004 6 8 5001 2 9 1004 6 7 7003 5 8 900输出将是alpha beta gamma max_mean_val corresp_std_val1 2 9 400 1004 6 7 500 7003 5 8 600 900
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

首先通过内连接或左连接将 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



查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信