একাধিক শ্রেণিবদ্ধ কলাম রূপান্তর করুন


10

আমার ডেটাসেটে আমার দুটি শ্রেণীবদ্ধ কলাম রয়েছে যা আমি অঙ্ক করতে চাই। দুটি কলামে উভয় দেশ রয়েছে, কিছু ওভারল্যাপ রয়েছে (উভয় কলামে প্রদর্শিত হবে)। আমি একই দেশের জন্য কলাম 1 এবং কলাম 2 তে একই সংখ্যাটি দিতে চাই।

আমার ডেটা কিছুটা মনে হচ্ছে:

import pandas as pd

d = {'col1': ['NL', 'BE', 'FR', 'BE'], 'col2': ['BE', 'NL', 'ES', 'ES']}
df = pd.DataFrame(data=d)
df

বর্তমান আমি ডেটাগুলিকে রূপান্তর করছি:

from sklearn.preprocessing import LabelEncoder
df.apply(LabelEncoder().fit_transform)

তবে এটি এফআর এবং ইএস এর মধ্যে কোনও পার্থক্য করে না। নিম্নলিখিত আউটপুটে আসতে আরও কি সহজ উপায় আছে?

o = {'col1': [2,0,1,0], 'col2': [0,2,4,4]}
output = pd.DataFrame(data=o)
output

উত্তর:


8

এখানে একটি উপায়

df.stack().astype('category').cat.codes.unstack()
Out[190]: 
   col1  col2
0     3     0
1     0     3
2     2     1
3     0     1

অথবা

s=df.stack()
s[:]=s.factorize()[0]
s.unstack()
Out[196]: 
   col1  col2
0     0     1
1     1     0
2     2     3
3     1     3

5

আপনি প্রথমে আপনার ডেটাফ্রেমের অনন্য মানগুলির সাথে LabelEncoder () ফিট করতে পারেন এবং তারপরে রূপান্তর করতে পারেন।

le = LabelEncoder()
le.fit(pd.concat([df.col1, df.col2]).unique()) # or np.unique(df.values.reshape(-1,1))

df.apply(le.transform)
Out[28]: 
   col1  col2
0     3     0
1     0     3
2     2     1
3     0     1

2

np.uniqueসঙ্গে return_invesere। যদিও আপনার তখন ডেটা ফ্রেমটি পুনর্গঠন করা দরকার।

pd.DataFrame(np.unique(df, return_inverse=True)[1].reshape(df.shape),
             index=df.index,
             columns=df.columns)

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