列の最大値を見つけ、パンダを使用して対応する行の値を返します


117

データの構造;

Python Pandasを使用して、最大値のCountry&を見つけようとしていPlaceます。

これは最大値を返します:

data.groupby(['Country','Place'])['Value'].max()

しかし、どのように私は、対応するのですかCountryPlace名前?

回答:


170

df一意のインデックスがあるとすると、最大値を持つ行が得られます。

In [34]: df.loc[df['Value'].idxmax()]
Out[34]: 
Country        US
Place      Kansas
Value         894
Name: 7

idxmaxはインデックスラベルを返すことに注意してください。したがって、DataFrameのインデックスが重複している場合、ラベルは行を一意に識別できないため、複数の行をdf.loc返す可能性があります。

したがって、にdf一意のインデックスがない場合は、上記の手順に進む前にインデックスを一意にする必要があります。DataFrameによっては、stackまたはset_indexを使用してインデックスを一意にすることができます。または、単にインデックスをリセットすることもできます(そのため、行の番号は0から始まります):

df = df.reset_index()

ありがとうございました。それがまさに私が探していたものです。
リッチー2013

56
df[df['Value']==df['Value'].max()]

これは最大値を持つ行全体を返します


説明:-内部式は、dataFrameの長さ全体にわたってブール値チェックを実行します。式(.max())の右辺を満たすインデックスは、インデックスを返します。これにより、そのdataFrameの完全な行が呼び出されます
ペンタ

10

国と場所はシリーズのインデックスです。インデックスが必要ない場合は、次のように設定できますas_index=False

df.groupby(['country','place'], as_index=False)['value'].max()

編集:

すべての国の最大値を持つ場所が必要なようですが、次のコードはあなたが望むことを行います:

df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))

これは、列名とdtypeのみを返します
richie

8

最大値を持つ行を返す最も簡単な方法は、そのインデックスを取得することだと思います。argmax()最大値を持つ行のインデックスを返すために使用できます。

index = df.Value.argmax()

これで、インデックスを使用して、その特定の行の機能を取得できます。

df.iloc[df.Value.argmax(), 0:2]

7

index属性を使用しますDataFrame。この例ではすべての行を入力しているわけではないことに注意してください。

In [14]: df = data.groupby(['Country','Place'])['Value'].max()

In [15]: df.index
Out[15]: 
MultiIndex
[Spain  Manchester, UK     London    , US     Mchigan   ,        NewYork   ]

In [16]: df.index[0]
Out[16]: ('Spain', 'Manchester')

In [17]: df.index[1]
Out[17]: ('UK', 'London')

そのインデックスによって値を取得することもできます。

In [21]: for index in df.index:
    print index, df[index]
   ....:      
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562

編集する

あなたが欲しいものを誤解して申し訳ありませんが、以下を試してください:

In [52]: s=data.max()

In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854

正しい。しかし、私は言う1つのライン出力、「米国、カンザス州、894」を探しています
リッチー・

ありがとう。これにより、値を持つ列が1つしかない現在のデータセットの問題が解決されます。値を持つ列がさらにある場合、@ unutbuのソリューションの方が効果的です。とにかくありがとう。
リッチー2013

5

国と場所を最大値で印刷するには、次のコード行を使用します。

print(df[['Country', 'Place']][df.Value == df.Value.max()])


2

nlargestパフォーマンスを向上させ、コードを短くすることをお勧めします。インポートpandas

df[col_name].value_counts().nlargest(n=1)


2

import pandas
dfは、作成するデータフレームです。

次のコマンドを使用します。

df1=df[['Country','Place']][df.Value == df['Value'].max()]

これにより、値が最大である国と場所が表示されます。


0

パンダを使用してデータをインポートしようとしたときに同様のエラーが発生しました。データセットの最初の列には、単語の先頭の前にスペースがありました。スペースを外してみたところ魅力的でした!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.