繁体   English   中英

从一列中获取对应于行子集的另一列的最小值的值

[英]Get values from one column corresponding to the minimum value of another column for a subset of rows

如果问题不完全清楚,请道歉。 但是,我确实有一些示例代码显示所需的输入和 output(见下文)。

我有一个(大)pandas dataframe 并想要 select 中的最小值和相应的滞后。 我还想 select pval2 中的最小值和相应的滞后。 我想对每对变量(即(A 和 B)、(A 和 C)和(B 和 D))执行此操作。 每对变量在数据集中出现多次。

我已经尝试了几种方法来尝试获得我想要的 output,但似乎缺少一些逻辑明智的东西,我不太确定是什么。 任何帮助将不胜感激。

感谢任何帮助的人!

dataframe 看起来像这样:

myxdf = pd.DataFrame({
    'pval1': [0.01,0.2,0.001,0.3,0.0003,0.05,1,0.002,0.2],
    'pval2': [0.3,0.02,0.002,0.9,0.001,0.002,0.10,0.93,0.00001],
    'lag': [1,2,3,1,2,3,1,2,3],
    'var1': ['A','A','A','A','A','A','B','B','B'],
    'var2': ['B','B','B','C','C','C','D','D','D']
})
    
myxdf

对于上述示例,我想要的 output 理想情况下应该是这样的(请注意新的 lag1 和 lag2 列):

myxdf2 = pd.DataFrame({
    'pval1': [0.0010,0.0003,0.002],
    'pval2' : [0.002,0.001,0.00001],
    'lagp1': ['3','2','2'],
    'lagp2': ['3','2','3'],
    'var1': ['A','A','B'],
    'var2': ['B','C','D']
})

myxdf2

我相信您需要DataFrameGroupBy.idxmin用于最小值索引,将其用于 select 行,重命名列并通过concat连接:

df = myxdf.groupby(['var1','var2'])[['pval1', 'pval2']].idxmin()


df1 = myxdf.loc[df['pval1'], ['pval1','lag']].rename(columns={'lag':'lagp1'})
df2 = myxdf.loc[df['pval2'], ['pval2','lag','var1','var2']].rename(columns={'lag':'lagp2'})

df = pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis=1)
cols = ['pval1', 'pval2', 'lagp1', 'lagp2', 'var1', 'var2']
df = df[cols]
print (df)
    pval1    pval2  lagp1  lagp2 var1 var2
0  0.0010  0.00200      3      3    A    B
1  0.0003  0.00100      2      2    A    C
2  0.0020  0.00001      2      3    B    D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM