2016-02-12 29 views
3

我試圖找到一種有效的方法來確定DataFrame中具有最高值的行一個列(值),當他們的「字符串」在另一列(字符串)是相同的,創建一個新的列(主題)與此信息供以後使用。Python:在DataFrame中,將值添加到另一列中具有最高值的行的新列中,並在第三列中將值相同的字符串

這裏一個數據幀的例子:

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,然後結合不同的組,但我c不正確。

除了使用groupby之外,有沒有一種有效的方法來實現?

回答

1

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 
+0

由於它的作品! –

相關問題