在Python列

时间:2017-07-12 17:27:26

标签: python pandas group-by pandas-groupby

我在pandas python中有这样的数据框(combined_ranking_df):

                Id  Rank                         Activity
0              14035   8.0                         deployed
1              47728   8.0                         deployed
2              24259   1.0                         NaN
3              24259   6.0                         WIP
4              14251   8.0                         deployed
5              14250   1.0                         NaN
6              14250   6.0                         WIP
7              14250   5.0                         NaN
8              14250   5.0                         NaN
9              14250   1.0                         NaN

我正在尝试获取每个id的最大值。例如,14250它应该是6.0。 24259它应该是6.0。

                Id  Rank                         Activity
0              14035   8.0                         deployed
1              47728   8.0                         deployed
3              24259   6.0                         WIP
4              14251   8.0                         deployed
6              14250   6.0                         WIP

我尝试了combined_ranking_df.groupby(['Id'], sort=False)['Rank'].max(),但我实现的结果是第一个dataframe(没有改变)。

我做错了什么?

4 个答案:

答案 0 :(得分:9)

选项1
与@ ayhan的回答相同here
这通过对每个'Id'组的最后位置中保留最大值的数据帧进行排序来回答问题。 pd.DataFrame.drop_duplicates使我们能够保留每个组的第一个或最后一个。然而,这是一个非常快速的方便巧合。它没有概括说每个'Id'的前两个。

df.sort_values('Rank').drop_duplicates('Id', 'last')

      Id  Rank  Activity
3  24259   6.0       WIP
6  14250   6.0       WIP
0  14035   8.0  deployed
1  47728   8.0  deployed
4  14251   8.0  deployed

您可以在最后对索引进行排序

df.sort_values('Rank').drop_duplicates('Id', 'last').sort_index()

      Id  Rank  Activity
0  14035   8.0  deployed
1  47728   8.0  deployed
3  24259   6.0       WIP
4  14251   8.0  deployed
6  14250   6.0       WIP

选项2
groupbyidxmax
这是我认为解决这个问题最惯用的方法。 @ MaxU的答案是推广到每n最大'Id'的最佳方式。

df.loc[df.groupby('Id', sort=False).Rank.idxmax()]

      Id  Rank  Activity
0  14035   8.0  deployed
1  47728   8.0  deployed
3  24259   6.0       WIP
4  14251   8.0  deployed
6  14250   6.0       WIP

答案 1 :(得分:6)

IIUC:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr class="jsgrid-edit-row">
   <td class="jsgrid-cell jsgrid-align-left" style="width: 100px;">
      <select>
         <option value="1">SW</option>
         <option value="2">HW</option>
      </select>
   </td>
   <td class="jsgrid-cell jsgrid-align-left" style="width: 80px;">
      <input type="text" />
   </td>
   <td class="jsgrid-cell jsgrid-align-left" style="width: 100px;">
      <select>
         <option value="1">COMPUTER</option>
         <option value="2">MONITOR</option>
         <option value="3">NETWORK COMPONENTS</option>
         <option value="4">OFFICE EQUIPMENT</option>
         <option value="5">SOFTWARE</option>
         <option value="6">STORAGE</option>
      </select>
   </td>
   <td class="jsgrid-cell jsgrid-align-left" style="width: 80px;">
      <input type="text" />
   </td>
   <td class="jsgrid-cell jsgrid-align-left" style="width: 80px;">
      <input type="text" />
   </td>
   <td class="jsgrid-cell jsgrid-align-left" style="width: 80px;">
      <input type="text" />
   </td>          
</tr>
</table>

或来自@piRSquared的更好的版本:

In [40]: df.groupby('Id', as_index=False, sort=False) \
           .apply(lambda x: x.nlargest(1, ['Rank'])) \
    ...:   .reset_index(level=1, drop=True)
Out[40]:
      Id  Rank  Activity
0  14035   8.0  deployed
1  47728   8.0  deployed
2  24259   6.0       WIP
3  14251   8.0  deployed
4  14250   6.0       WIP

答案 2 :(得分:4)

尝试存储它,然后查阅存储的{ "StackId": stackidarn, "ResponseURL": "http://pre-signed-S3-url-for-response", "ResourceProperties": { "StackName": "stack-name", "List": [ "1", "2", "3" ] }, "RequestType": "Create", "ResourceType": "Custom::TestResource", "RequestId": "unique id for this create request", "LogicalResourceId": "MyTestResource" }

groupedby

答案 3 :(得分:3)

您可以创建一个布尔索引来检查给定Rank的{​​{1}}是否等于其最大值。然后使用布尔索引从数据帧中提取最大值。

使用Id groupby在[{1}}的帮助下创建了掩码,该Id保留了数据帧的原始尺寸。

transform