关于另一个 csv、pandas 上的操作(聚合最大值)的相应 csv 值
Posted
技术标签:
【中文标题】关于另一个 csv、pandas 上的操作(聚合最大值)的相应 csv 值【英文标题】:Corresponding csv values with respect to operation(aggregate max) on another csv, pandas 【发布时间】:2021-01-09 23:53:00 【问题描述】:我有两张均值表和标准值表,我想计算均值表某些列的最大值,并且我想得到标准值表的对应行。
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
【问题讨论】:
您的问题到底是什么?请阅读How do I ask a good question?。特别是“在发布任何代码之前介绍问题”部分。 您现在可以调查一下吗?我基本上有两个表,我计算表 1 中某些列的最大值,我想要表 2 中的相应行 检查this question。 这能回答你的问题吗? Get the Row(s) which have the max count in groups using groupby 【参考方案1】:首先通过内连接或左连接将DataFrames合并在一起,然后通过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
【讨论】:
好主意,我也在尝试使用merge,如何解决多个val列的问题,即val1_mean, val2_mean, val1_std, val2_std 对于多个 val 列,我通过多次获取 df.loc 并将“valx_std”列分配给最大 mean_df 来解决它。有没有更好的答案 @charanReddy - 为解决方案而努力,给他们一点时间。以上是关于关于另一个 csv、pandas 上的操作(聚合最大值)的相应 csv 值的主要内容,如果未能解决你的问题,请参考以下文章