我试图找到一种有效的方法来确定在数据框中,当列(值)中的“字符串”在另一列(字符串)中相同时,列(值)中的哪个行具有最高的值,从而创建一个包含此信息的新列(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

我试着用分离-应用-合并的方法
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,是否有其他有效的方法来实现这一点?

最佳答案

IIUC然后您可以groupby在“String”上,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

关于python - Python:在DataFrame中,在新列中为另一行中具有最高值的行添加值,在第三列中添加相同的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35352463/

10-12 18:45