DataFrame.idxmax(axis=0,
skipna=True)[source]¶ Return index of first occurrence of maximum over requested
axis. NA/null values are excluded. Parametersaxis{0 or ‘index’, 1 or ‘columns’}, default 0The axis to use. 0 or ‘index’ for row-wise, 1 or ‘columns’ for column-wise. skipnabool, default TrueExclude NA/null values. If an entire row/column is NA, the result will be NA. ReturnsSeriesIndexes of maxima along the specified
axis. RaisesValueErrorNotes This method is the DataFrame version of ndarray.argmax . Examples Consider a dataset containing food consumption in Argentina. >>> df = pd.DataFrame({'consumption': [10.51, 103.11, 55.48],
... 'co2_emissions': [37.2, 19.66, 1712]},
... index=['Pork', 'Wheat Products', 'Beef'])
>>> df
consumption co2_emissions
Pork 10.51 37.20
Wheat Products 103.11 19.66
Beef 55.48 1712.00
By default, it returns the index for the maximum value in each column. >>> df.idxmax()
consumption Wheat Products
co2_emissions Beef
dtype: object
To return the index for the maximum value in each row, use axis="columns" .
>>> df.idxmax(axis="columns")
Pork co2_emissions
Wheat Products consumption
Beef co2_emissions
dtype: object
Tôi có một khung dữ liệu được tạo qua df.pivot: type start end
F_Type to_date
A 20150908143000 345 316
B 20150908140300 NaN 480
20150908140600 NaN 120
20150908143000 10743 8803
C 20150908140100 NaN 1715
20150908140200 NaN 1062
20150908141000 NaN 145
20150908141500 418 NaN
20150908141800 NaN 450
20150908142900 1973 1499
20150908143000 19522 16659
D 20150908143000 433 65
E 20150908143000 7290 7375
F 20150908143000 0 0
G 20150908143000 1796 340
Tôi muốn lọc và trả về một hàng cho mỗi 'F_TYPE' chỉ trả về hàng có 'to_date' Tối đa. Tôi muốn trả lại khung dữ liệu sau: type start end
F_Type to_date
A 20150908143000 345 316
B 20150908143000 10743 8803
C 20150908143000 19522 16659
D 20150908143000 433 65
E 20150908143000 7290 7375
F 20150908143000 0 0
G 20150908143000 1796 340
Cảm ơn.. 26 hữu ích 1 bình luận 38k xem chia sẻ answer 61 Một cách tiếp cận tiêu chuẩn là sử dụng groupby(keys)[column].idxmax() . Tuy nhiên, để chọn các hàng mong muốn bằng cách sử dụng,
idxmax bạn cần idxmax trả về các giá trị chỉ mục duy nhất. Một cách để có được một chỉ mục duy nhất là gọi reset_index . Khi bạn nhận được các giá trị chỉ mục từ đó, groupby(keys)[column].idxmax() bạn có thể chọn toàn bộ hàng bằng cách sử dụng df.loc : In [20]: df.loc[df.reset_index().groupby(['F_Type'])['to_date'].idxmax()]
Out[20]:
start end
F_Type to_date
A 20150908143000 345 316
B 20150908143000 10743 8803
C 20150908143000 19522 16659
D 20150908143000 433 65
E 20150908143000 7290 7375
F 20150908143000 0 0
G 20150908143000 1796 340
Lưu ý: idxmax trả về nhãn chỉ mục , không nhất thiết là thứ tự. Sau khi sử dụng reset_index các
nhãn chỉ mục cũng sẽ là thứ tự, nhưng vì idxmax là nhãn trả về (không phải thứ tự), tốt hơn là luôn sử dụng idxmax kết hợp với df.loc chứ không phải df.iloc (như tôi đã làm trong bài đăng này ban đầu.) 61 hữu ích
1 bình luận chia sẻ answer 4 Các cách khác để làm điều đó như sau: - Nếu bạn chỉ muốn một hàng tối đa cho mỗi nhóm.
(
df
.groupby(level=0)
.apply(lambda group: group.nlargest(1, columns='to_date'))
.reset_index(level=-1, drop=True)
)
- Nếu bạn muốn nhận tất cả các hàng bằng giá trị tối đa cho mỗi nhóm.
(
df
.groupby(level=0)
.apply(lambda group: group.loc[group['to_date'] == group['to_date'].max()])
.reset_index(level=-1, drop=True)
)
4 hữu ích 2 bình luận chia sẻ Đăng nhập để trả lời câu hỏiCó thể bạn quan tâm |