[英]Pandas: add a new column with one single value at the last row of a 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.