দুটি ডেটাফ্রেমগুলি মার্জ করুন এবং নামগুলির সাথে কলাম স্তর যুক্ত করুন


9

হাই, আমি কনডাক্টটি দিয়ে খনন করেছি, যোগ দিয়েছি এবং পান্ডাদের জন্য একত্রীকরণের পদ্ধতিগুলি এবং আমার যা চাইছে তা খুঁজে পাচ্ছে না।

ধরে নিই আমার কাছে দুটি ডেটা ফ্রেম রয়েছে

A = pd.DataFrame("A",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
B = pd.DataFrame("B",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
>>> A
  Col 1 Col 2 Col 3
0     A     A     A
1     A     A     A
2     A     A     A
3     A     A     A
4     A     A     A
>>> B
  Col 1 Col 2 Col 3
0     B     B     B
1     B     B     B
2     B     B     B
3     B     B     B
4     B     B     B

এখন আমি কলামগুলিকে একীভূত করে একটি নতুন ডেটাফ্রেম তৈরি করতে চাই, আমি কীভাবে কলামগুলি চাই তার জন্য একটি বহু সূচক তৈরি করি কিনা তা ব্যাখ্যা করা সবচেয়ে সহজ বলে আমি মনে করি

index = pd.MultiIndex.from_product([A.columns.values,['A','B']])
>>> index
MultiIndex(levels=[['Col 1', 'Col 2', 'Col 3'], ['A', 'B']],
           labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])

এখন যদি আমি কলামগুলির জন্য এই বহু সূচকে একটি খালি ডেটা ফ্রেম করি

empty_df = pd.DataFrame('-',index=A.index,columns=index)
>>> empty_df
  Col 1    Col 2    Col 3
      A  B     A  B     A  B
0     -  -     -  -     -  -
1     -  -     -  -     -  -
2     -  -     -  -     -  -
3     -  -     -  -     -  -
4     -  -     -  -     -  -

আমার প্রশ্নটি হ'ল আমি কীটি একীভূত, কনক্যাট, বা যোগদানের জন্য এটি ব্যবহার করতে পারি? আমি কনক্যাট ... অভ্যন্তরীণ, বাহ্যিক ইত্যাদির জন্য একাধিক জিনিস চেষ্টা করেছি যা আমি চাই তা পাই না। কেবলমাত্র আমি যা ভাবতে পারি তা হ'ল খালি ডেটা ফ্রেম তৈরি করা এবং তারপরে ফিরে আসা।

সম্পাদনা: জিজরেলের প্রতিক্রিয়া চেষ্টা করার পরে, এটি ঠিক তবে এটি ঠিক নয়। আমি যা চাই তা বাছাইয়ের নেস্টেড কলামগুলির মতো? উদাহরণ স্বরূপ

empty_df['Col 1']
>>> empty_df['Col 1']
   A  B
0  -  -
1  -  -
2  -  -
3  -  -
4  -  -

অথবা

>>> empty_df['Col 1']['A']
0    -
1    -
2    -
3    -
4    -
Name: A, dtype: object

সুতরাং এটি এমন একটি সমাধান যা আমি এনেছি তবে এটি কলামগুলিতে পুনরাবৃত্তি হতে পারে।

row_idx = A.index.union(B.index)
col_idx = pd.MultiIndex.from_product([A.columns.values,['A','B']])
new_df = pd.DataFrame('-',index=row_idx,columns=col_idx)
for column in A.columns:
   new_df.loc[:,(column,'A')] = A[column]
   new_df.loc[:,(column,'B')] = B[column]
>>> new_df
  Col 1    Col 2    Col 3
      A  B     A  B     A  B
0     A  B     A  B     A  B
1     A  B     A  B     A  B
2     A  B     A  B     A  B
3     A  B     A  B     A  B
4     A  B     A  B     A  B
>>> new_df['Col 1']
   A  B
0  A  B
1  A  B
2  A  B
3  A  B
4  A  B
>>> new_df['Col 1']['A']
0    A
1    A
2    A
3    A
4    A
Name: A, dtype: object

উত্তর:


8

আমার মনে হয় আপনি প্রয়োজন concatসঙ্গে keysপরামিতি এবং axis=1দ্বারা স্তরের শেষ পরিবর্তন অর্ডার DataFrame.swaplevelএবং প্রথম স্তর দ্বারা বাছাই DataFrame.sort_index:

df1 = (pd.concat([A, B], axis=1, keys=('A','B'))
         .swaplevel(0,1, axis=1)
         .sort_index(axis=1, level=0))
print (df1)
  Col 1    Col 2    Col 3   
      A  B     A  B     A  B
0     A  B     A  B     A  B
1     A  B     A  B     A  B
2     A  B     A  B     A  B
3     A  B     A  B     A  B
4     A  B     A  B     A  B

সাথে কাজ করার MultiIndexজন্য সম্ভাব্য ব্যবহার DataFrame.xs:

print (df1.xs('Col 1', axis=1, level=0))
   A  B
0  A  B
1  A  B
2  A  B
3  A  B
4  A  B

তাহলে নির্বাচন চান MultiIndex columnব্যবহার tuple:

print (df1[('Col 1', 'A')])
0    A
1    A
2    A
3    A
4    A
Name: (Col 1, A), dtype: object

যদি সূচী দ্বারা এবং কলাম ব্যবহার করে নির্বাচন করতে চান loc:

print (df1.loc[4, ('Col 1', 'A')])
A

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