পান্ডস অনন্য মান একাধিক কলাম


134
df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
                   'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
                   'Col3': np.random.random(5)})

'কল 1' এবং 'কল 2' এর অনন্য মানগুলি ফিরিয়ে দেওয়ার সর্বোত্তম উপায় কী?

কাঙ্ক্ষিত আউটপুট হয়

'Bob', 'Joe', 'Bill', 'Mary', 'Steve'

3
পান্ডাস ডেটা ফ্রেমে নির্বাচিত কলামগুলিতে মানগুলির অনন্য সংমিশ্রণগুলি দেখুন এবং একটি ভিন্ন তবে সম্পর্কিত প্রশ্নের জন্য গণনা করুন । সেখানে নির্বাচিত উত্তরটি ব্যবহার করেdf1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
পল রাউজিউক্স

উত্তর:


198

pd.unique ইনপুট অ্যারে, বা ডেটা ফ্রেম কলাম বা সূচক থেকে অনন্য মানগুলি প্রদান করে।

এই ফাংশনটির ইনপুটটি এক-মাত্রিক হওয়া দরকার, তাই একাধিক কলামগুলি একত্রিত করা দরকার। সবচেয়ে সহজ উপায় হ'ল আপনি যে কলামগুলি চান তা নির্বাচন করুন এবং তারপরে একটি সমতল NumPy অ্যারেতে মানগুলি দেখুন। পুরো অপারেশনটি এরকম দেখাচ্ছে:

>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)

নোট যে ravel()একটি বহুমাত্রিক অ্যারের ভিউ (সম্ভব হলে) প্রদানের চেয়ে অ্যারে পদ্ধতি। যুক্তিটি 'K'পদ্ধতিগুলিকে অ্যারে সমতল করার পদ্ধতিটিকে ক্রমে উপাদানগুলিকে মেমোরিতে সংরক্ষণ করার পদ্ধতি বলে (প্যান্ডাস সাধারণত ফোরট্রান-সামঞ্জস্যপূর্ণ ক্রমে অন্তর্নিহিত অ্যারে সঞ্চয় করে ; সারিগুলির আগে কলামগুলি)। পদ্ধতির ডিফল্ট 'সি' অর্ডার ব্যবহার করার চেয়ে এটি উল্লেখযোগ্যভাবে দ্রুত হতে পারে।


বিকল্প উপায় হ'ল কলামগুলি নির্বাচন করা এবং এগুলিতে প্রেরণ করা np.unique:

>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)

ravel()পদ্ধতিটি বহুমাত্রিক অ্যারে পরিচালনা করে বলে এখানে ব্যবহার করার দরকার নেই । তবুও, pd.uniqueএটি অনন্য মানেরগুলি চিহ্নিত করার জন্য হ্যাশটেবলের পরিবর্তে বাছাই-ভিত্তিক অ্যালগরিদম ব্যবহার করার কারণে এটি ধীর হতে পারে ।

গতির পার্থক্য বৃহত্তর ডেটাফ্রেমগুলির জন্য তাৎপর্যপূর্ণ (বিশেষত যদি কেবলমাত্র কয়েকটি মুখ্য অনন্য মূল্য থাকে):

>>> df1 = pd.concat([df]*100000, ignore_index=True) # DataFrame with 500000 rows
>>> %timeit np.unique(df1[['Col1', 'Col2']].values)
1 loop, best of 3: 1.12 s per loop

>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel('K'))
10 loops, best of 3: 38.9 ms per loop

>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel()) # ravel using C order
10 loops, best of 3: 49.9 ms per loop

2
আপনি কীভাবে অ্যারের পরিবর্তে ডেটাফ্রেম ফিরে পাবেন?
লিজল

1
@Lisle: উভয় পদ্ধতি, একটি NumPy অ্যারে ফিরে, তাই আপনি নিজে গঠন করা, যেমন থাকবে pd.DataFrame(unique_values)। সরাসরি ডেটা ফ্রেম ফিরে পাওয়ার কোনও ভাল উপায় নেই।
অ্যালেক্স রিলি

@ লিসল যেহেতু তিনি পিডি ইউনিক ব্যবহার করেছেন এটি একটি চূড়ান্ত আউটপুট হিসাবে একটি নম্পি.অ্যান্ডারিকে দেয়। এই আপনি কি জিজ্ঞাসা ছিল?
অ্যাশ উপাধ্যায়

1
@ লিসল, সম্ভবত এই এক ডিএফ = ডিএফ.ড্রপ.ডুবলেটগুলি (সাবসেট = ['সি 1', 'সি 2', 'সি 3'])?
টিকলি আলু

14

আমি DataFrameএর কলামগুলিতে কয়েকটি সাধারণ স্ট্রিং সহ একটি সেটআপ করেছি :

>>> df
   a  b
0  a  g
1  b  h
2  d  a
3  e  e

আপনি যে কলামগুলিতে আগ্রহী সেগুলি একত্রীকরণ করতে এবং ফাংশনটিতে কল uniqueকরতে পারেন:

>>> pandas.concat([df['a'], df['b']]).unique()
array(['a', 'b', 'd', 'e', 'g', 'h'], dtype=object)


3

নম্পি v1.13 + ব্যবহার করে একটি আপডেট সমাধানের জন্য একাধিক কলাম ব্যবহার করা থাকলে অক্ষটি নির্দিষ্ট করে এনপি.উনিকের মধ্যে প্রয়োজন হয় , অন্যথায় অ্যারেটি স্পষ্টতই সমতল হয়।

import numpy as np

np.unique(df[['col1', 'col2']], axis=0)

এই পরিবর্তনটি নভেম্বর 2016 চালু হয়েছিল: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be


1

অ- pandasসমাধান: সেট () ব্যবহার করে।

import pandas as pd
import numpy as np

df = pd.DataFrame({'Col1' : ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
              'Col2' : ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
               'Col3' : np.random.random(5)})

print df

print set(df.Col1.append(df.Col2).values)

আউটপুট:

   Col1   Col2      Col3
0   Bob    Joe  0.201079
1   Joe  Steve  0.703279
2  Bill    Bob  0.722724
3  Mary    Bob  0.093912
4   Joe  Steve  0.766027
set(['Steve', 'Bob', 'Bill', 'Joe', 'Mary'])



0
list(set(df[['Col1', 'Col2']].as_matrix().reshape((1,-1)).tolist()[0]))

আউটপুটটি হবে '' মেরি ',' জো ',' স্টিভ ',' বব ',' বিল ']

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.