繁体   English   中英

Python:在DataFrame中,在新列中为另一列中具有最高值的行添加值,在第三列中添加相同的字符串

[英]Python: In DataFrame, add value in a new column for row with highest value in another column and string identical in a third one

我试图在DataFrame中找到一种有效的方法来确定当另一列(String)中的“String”相同时哪一行在列(值)中具有最高值,创建一个包含此信息的新列(motif)供以后使用。

这是一个数据帧的例子:

    String    N   value
0   EXAM     10     250
1   EXAMP    20     350
2   EXAMPLE  30     450
3   EXAMPLE  40     400
4   EXA      50     300
5   EX       60     100 

这是我正在寻找的:

    String    N   value  motif
0   EXAM     10     250    Nan
1   EXAMP    20     350    Nan
2   EXAMPLE  30     450      1
3   EXAMPLE  40     400    Nan
4   EXA      50     300    Nan
5   EX       60     100    Nan

我尝试使用split apply combine方法

def group_motif(df):
    if df.groupby(['String']).size() > 1:
        "something like for row with the highest value in column ['value']":
            "create a new column in df called ['motif'] and add value = 1 in the row

然后我groupby.apply做一个groupby.apply这个函数,然后结合不同的组,但我不能正确。

有没有一种有效的方法来实现除了使用groupby其他方法?

IIUC那么你可以groupby在“字符串”, filter它,然后调用idxmax那些行返回具有最高值的行标签和分配到1

In [201]:
df.loc[df.groupby('String').filter(lambda x: len(x) > 1)['value'].idxmax(), 'motif'] = 1
df

Out[201]:
    String   N  value  motif
0     EXAM  10    250    NaN
1    EXAMP  20    350    NaN
2  EXAMPLE  30    450      1
3  EXAMPLE  40    400    NaN
4      EXA  50    300    NaN
5       EX  60    100    NaN

暂无
暂无

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

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