3
を探す:私が見えるように結果が必要データがどのように見えるたとえば、各行のトップ3の最大値を持つ列名
df={'a1':[5,6,3,2,5],'a2':[23,43,56,2,6], 'a3':[4,2,3,6,7], 'a4':[1,2,1,3,2],'a5':[4,98,23,5,7],'a6':[5,43,3,2,5]}
x=pd.DataFrame(df)
Out[260]:
a1 a2 a3 a4 a5 a6
0 5 23 4 1 4 5
1 6 43 2 2 98 43
2 3 56 3 1 23 3
3 2 2 6 3 5 2
4 5 6 7 2 7 5
:
top1 top2 top3
a2 a1 a6
a5 a2 a6
....
私は答えを見てきましたidxmaxを推奨する以前の質問(下記参照)と比較します。しかし、上位n個の値(n> 1)を処理する方法はありますか?
Find the column name which has the maximum value for each row
更新:
私は答えは非常に便利見つけるだけの事は、私のデータが長いので、それを回避する方法を把握する必要がされていることです。私はCSVファイルにデータを保存してから、それを再びチャンクに読み込みました。ここに私が使用したコードがあります:
data = pd.read_csv('xxx.csv', chunksize=1000)
rslt = pd.DataFrame(np.zeros((0,3)), columns=['top1','top2','top3'])
for chunk in data:
x=pd.DataFrame(chunk).T
for i in x.columns:
df1row = pd.DataFrame(x.nlargest(3, i).index.tolist(), index=['top1','top2','top3']).T
rslt = pd.concat([rslt, df1row], axis=0)
rslt=rslt.reset_index(drop=True)
これは素晴らしい機能です。ただ一つのこと:私の実際のデータセットはかなり大きく(長い、400K行以上)、本当に転置することはできません。私はそれを動作させるために、チャンクのデータをPythonに読み込もうとしていますが、この場合(大きなデータサイズ)、それを扱う他の方法はありますか? Thx – CWeeks
@CWlearner、非常に大規模なデータセットの場合、チャンクの解決策は、純粋なpython pandasのアプローチでやってみたいと思うならば、私は考えることができます。 pandas](http://stackoverflow.com/questions/14262433/large-data-work-flows-using-pandas)。しかし、代わりにSQLを使用することを検討してみてください。これははるかに簡単です。 – 2342G456DI8