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