নিজের জন্য এই প্রশ্নের উত্তর দেওয়ার প্রক্রিয়ায়, আমি অনেক কিছু শিখেছি এবং উদাহরণ এবং কিছু ব্যাখ্যা একটি ক্যাটালগ একসাথে রাখতে চেয়েছিলাম।
levelsতর্কের বিন্দুর নির্দিষ্ট উত্তরটি শেষের দিকে আসবে।
pandas.concat: অনুপস্থিত ম্যানুয়াল
বর্তমান ডকুমেন্টেশন লিঙ্ক
পণ্যগুলি আমদানি এবং সংজ্ঞা দেয়
import pandas as pd
d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), index=[2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), index=[1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), index=[1, 3])
s1 = pd.Series([1, 2], index=[2, 3])
s2 = pd.Series([3, 4], index=[1, 2])
s3 = pd.Series([5, 6], index=[1, 3])
যুক্তি
objs
প্রথম যুক্তিটি আমরা দেখতে পাচ্ছি objs:
আপত্তি : সিরিজ, ডেটাফ্রেম বা প্যানেল অবজেক্টের ক্রম বা ম্যাপিং যদি ডিকটি পাস হয় তবে সাজানো কীগুলি কী যুক্তি হিসাবে ব্যবহৃত হবে, যদি তা পাস না করা হয়, সেক্ষেত্রে মানগুলি নির্বাচিত হবে (নীচে দেখুন)। যে কোনও একটি অবজেক্ট নিঃশব্দে বাদ দেওয়া হবে যদি না সেগুলি সমস্ত হয় তবে কোনও ক্ষেত্রেই কোনও ভ্যালুআরার উত্থাপিত হবে না
- আমরা সাধারণত এটি ব্যবহারের একটি তালিকা
Seriesবা DataFrameবস্তুর সাথে দেখতে পাই ।
- আমি
dictএটি খুব দরকারী হতে পারে প্রদর্শন করব ।
- জেনারেটরগুলিও ব্যবহার করা যেতে পারে এবং
mapহিসাবে ব্যবহারের সময় এটি কার্যকর হতে পারেmap(f, list_of_df)
আপাতত, আমরা উপরের সংজ্ঞায়িত কিছু DataFrameএবং Seriesসামগ্রীর একটি তালিকা দিয়ে স্টিক করব । আমি পরে কীভাবে খুব দরকারী MultiIndexফলাফল দেওয়ার জন্য অভিধানগুলি কীভাবে লাভ করা যায় তা দেখাব show
pd.concat([d1, d2])
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
axis
দ্বিতীয় আর্গুমেন্টটি আমরা মুখোমুখি হলাম axisযার ডিফল্ট মান 0:
অক্ষ : {0 / 'সূচক', 1 / 'কলাম'}, ডিফল্ট 0 অক্ষটি বরাবর আঁকতে হবে।
সাথে দুটি DataFrameএসaxis=0 (স্ট্যাকড)
0বা এর মানগুলির জন্যindex আমরা বলতে চাইছি: "কলামগুলির সাথে সারিবদ্ধ করুন এবং সূচীতে যুক্ত করুন"।
উপরে যেখানে আমরা ব্যবহার করেছি যেখানে প্রদর্শিত হয়েছে axis=0, কারণ 0এটি পূর্বনির্ধারিত মান এবং আমরা দেখতে পাই যে মানটির ওভারল্যাপ থাকা সত্ত্বেও d2সূচকটি সূচকে প্রসারিত করে :d12
pd.concat([d1, d2], axis=0)
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
সাথে দুটি DataFrameএসaxis=1 (পাশাপাশি)
মানগুলির জন্য 1বা columnsআমরা বলতে চাইছি: "সূচীর সাথে সারিবদ্ধ করুন এবং কলামগুলিতে যুক্ত করুন",
pd.concat([d1, d2], axis=1)
A B C B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
আমরা দেখতে পাচ্ছি যে ফলাফল সূচকগুলি সূচকগুলির সংঘ এবং ফলাফলযুক্ত কলামগুলি কলামগুলির d1দ্বারা কলামগুলির সম্প্রসারণ হয়d2 ।
দুই (বা তিন) Seriesসাথেaxis=0 (স্ট্যাকড)
pandas.Seriesপাশাপাশি একত্রিত হলে axis=0, আমরা একটি ফিরে পেতে pandas.Series। ফলে নাম Seriesহতে হবে Noneযদি না সব Seriesহচ্ছে মিলিত নাম একই। 'Name: A'যখন আমরা ফলাফলটি মুদ্রণ করি তখন মনোযোগ দিন Series। এটি উপস্থিত না থাকলে আমরা Seriesনামটি ধরে নিতে পারি None।
| | | pd.concat(
| pd.concat( | pd.concat( | [s1.rename('A'),
pd.concat( | [s1.rename('A'), | [s1.rename('A'), | s2.rename('B'),
[s1, s2]) | s2]) | s2.rename('A')]) | s3.rename('A')])
-------------- | --------------------- | ---------------------- | ----------------------
2 1 | 2 1 | 2 1 | 2 1
3 2 | 3 2 | 3 2 | 3 2
1 3 | 1 3 | 1 3 | 1 3
2 4 | 2 4 | 2 4 | 2 4
dtype: int64 | dtype: int64 | Name: A, dtype: int64 | 1 5
| | | 3 6
| | | dtype: int64
দুটি (বা তিন) Seriesপাশাপাশি axis=1(পাশাপাশি)
pandas.Seriesপাশাপাশি একত্রিত হওয়ার সময় axis=1, এটির nameফলাফলটি একটি কলামের নাম নির্ধারণ করার জন্য আমরা সেই বৈশিষ্ট্যটি উল্লেখ করি pandas.DataFrame।
| | pd.concat(
| pd.concat( | [s1.rename('X'),
pd.concat( | [s1.rename('X'), | s2.rename('Y'),
[s1, s2], axis=1) | s2], axis=1) | s3.rename('Z')], axis=1)
---------------------- | --------------------- | ------------------------------
0 1 | X 0 | X Y Z
1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 5.0
2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 NaN
3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN 6.0
মিশ্রিত Seriesএবং DataFrameসাথে axis=0(স্ট্যাকড)
একটি Seriesএবং DataFrameবরাবর একটি মনস্তাতন সম্পাদন করার সময় axis=0, আমরা সমস্ত Seriesএকক কলামে রূপান্তর করি DataFrame।
এটি খেয়াল করুন যে এটি পাশাপাশি একটি কনটেন্টেশন axis=0; এর অর্থ কলামগুলি সারিবদ্ধ করার সময় সূচী (সারি) প্রসারিত করা। নীচের উদাহরণগুলিতে, আমরা সূচকটি দেখতে পাই [2, 3, 2, 3]যা সূচকের একটি নির্বিচার সংযোজন। Seriesযুক্তি দিয়ে কলামটির নামকরণকে বাধ্য না করা পর্যন্ত কলামগুলি ওভারল্যাপ হয় না to_frame:
pd.concat( |
[s1.to_frame(), d1]) | pd.concat([s1, d1])
------------------------- | ---------------------
0 A B C | 0 A B C
2 1.0 NaN NaN NaN | 2 1.0 NaN NaN NaN
3 2.0 NaN NaN NaN | 3 2.0 NaN NaN NaN
2 NaN 0.1 0.2 0.3 | 2 NaN 0.1 0.2 0.3
3 NaN 0.1 0.2 0.3 | 3 NaN 0.1 0.2 0.3
আপনি দেখতে পাচ্ছেন যে ফলাফলগুলি pd.concat([s1, d1])একই রকমের আমি যদি পারফর্মড করেছিলামto_frame নিজেকে।
যাইহোক, আমি পরামিতি দ্বারা ফলাফল কলামের নাম নিয়ন্ত্রণ করতে পারি to_frame। পদ্ধতিটির Seriesসাথে নামকরণ ফলাফলের কলামের নামটি নিয়ন্ত্রণ renameকরে নাDataFrame ।
pd.concat( | pd.concat( | pd.concat(
[s1.to_frame('X'), d1]) | [s1.rename('X'), d1]) | [s1.to_frame('B'), d1])
---------------------------- | -------------------------- | ----------------------------
A B C X | 0 A B C | A B C
2 NaN NaN NaN 1.0 | 2 1.0 NaN NaN NaN | 2 NaN 1.0 NaN
3 NaN NaN NaN 2.0 | 3 2.0 NaN NaN NaN | 3 NaN 2.0 NaN
2 0.1 0.2 0.3 NaN | 2 NaN 0.1 0.2 0.3 | 2 0.1 0.2 0.3
3 0.1 0.2 0.3 NaN | 3 NaN 0.1 0.2 0.3 | 3 0.1 0.2 0.3
মিশ্রিত Seriesএবং DataFrameসাথেaxis=1 (পাশাপাশি)
এটি মোটামুটি স্বজ্ঞাত। Seriesকলামের নাম Seriesযখন কোনও nameঅ্যাট্রিবিউট উপলব্ধ থাকে না তখন এই জাতীয় অবজেক্টের একটি গণনার ডিফল্ট হয় ।
| pd.concat(
pd.concat( | [s1.rename('X'),
[s1, d1], | s2, s3, d1],
axis=1) | axis=1)
------------------- | -------------------------------
0 A B C | X 0 1 A B C
2 1 0.1 0.2 0.3 | 1 NaN 3.0 5.0 NaN NaN NaN
3 2 0.1 0.2 0.3 | 2 1.0 4.0 NaN 0.1 0.2 0.3
| 3 2.0 NaN 6.0 0.1 0.2 0.3
join
তৃতীয় যুক্তি হ'ল joinযে বর্ণিত ফলাফলটি একটি বাহ্যিক মার্জ (ডিফল্ট) বা অভ্যন্তরীণ মার্জ হওয়া উচিত কিনা তা বর্ণনা করে।
যোগ দিন : ax 'অভ্যন্তরীণ', 'বাহ্যিক'}, ডিফল্ট 'বহিরাগত'
অন্যান্য অক্ষ (এস) এর সূচকগুলি কীভাবে পরিচালনা করতে হয়)
দেখা যাচ্ছে, এর মতো কোনও বিকল্প leftবা rightবিকল্প নেইpd.concat দুটি চেয়ে বেশি দুটি হ্যান্ডেল করতে পারে ।
ক্ষেত্রে d1এবং d2, বিকল্প মত চেহারা:
outer
pd.concat([d1, d2], axis=1, join='outer')
A B C B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
inner
pd.concat([d1, d2], axis=1, join='inner')
A B C B C D
2 0.1 0.2 0.3 0.4 0.5 0.6
join_axes
চতুর্থ যুক্তি হ'ল এমন জিনিস যা আমাদের leftমার্জ এবং আরও অনেক কিছু করতে দেয় ।
join_axes : সূচক অবজেক্টের তালিকা
অভ্যন্তরীণ / বাহ্যিক সেট যুক্তি সম্পাদন না করে অন্যান্য এন - 1 অক্ষের জন্য নির্দিষ্ট সূচকগুলি ব্যবহার করতে হবে।
বাম মার্জ
pd.concat([d1, d2, d3], axis=1, join_axes=[d1.index])
A B C B C D A B D
2 0.1 0.2 0.3 0.4 0.5 0.6 NaN NaN NaN
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
রাইট মার্জ
pd.concat([d1, d2, d3], axis=1, join_axes=[d3.index])
A B C B C D A B D
1 NaN NaN NaN 0.4 0.5 0.6 0.7 0.8 0.9
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
ignore_index
উপেক্ষা_আইনডেক্স : বুলিয়ান, ডিফল্ট মিথ্যা
যদি সত্য হয় তবে সূচক মানগুলি সংক্ষিপ্ত অক্ষের সাথে ব্যবহার করবেন না। ফলস্বরূপ অক্ষটি 0, ..., n - 1 লেবেলযুক্ত হবে এটি যদি আপনি এমন বস্তুগুলিকে সংমিশ্রিত করে থাকেন যেখানে সংক্ষিপ্ত অক্ষের অর্থপূর্ণ সূচীকরণ তথ্য নেই This নোট করুন অন্যান্য অক্ষের সূচক মানগুলি এখনও যোগে সম্মানিত।
আমি যখন d1শীর্ষে স্ট্যাক করি তখনকার মতো d2, যদি আমি সূচকের মানগুলির বিষয়ে চিন্তা না করি তবে আমি সেগুলি পুনরায় সেট করতে বা এড়িয়ে যেতে পারি।
| pd.concat( | pd.concat(
| [d1, d2], | [d1, d2]
pd.concat([d1, d2]) | ignore_index=True) | ).reset_index(drop=True)
--------------------- | ----------------------- | -------------------------
A B C D | A B C D | A B C D
2 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6
এবং ব্যবহার করার সময় axis=1:
| pd.concat(
| [d1, d2], axis=1,
pd.concat([d1, d2], axis=1) | ignore_index=True)
------------------------------- | -------------------------------
A B C B C D | 0 1 2 3 4 5
1 NaN NaN NaN 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN | 3 0.1 0.2 0.3 NaN NaN NaN
keys
সংশ্লিষ্ট মাল্টিআইডেক্সে টিপল বা স্কেলারের মান নির্ধারণের জন্য আমরা স্কেলার মান বা টিপলগুলির একটি তালিকা পাস করতে পারি। উত্তীর্ণ তালিকার দৈর্ঘ্য অবশ্যই সংযুক্ত হওয়া আইটেমের সংখ্যার সমান দৈর্ঘ্য হতে হবে।
কীগুলি : ক্রম, ডিফল্ট কিছুই নয়
যদি একাধিক স্তর পাস হয়ে থাকে তবে এতে টিপলস থাকা উচিত। বহিরাগত স্তর হিসাবে পাস কীগুলি ব্যবহার করে শ্রেণিবদ্ধ সূচক তৈরি করুন
axis=0
Seriesবরাবর বস্তুগুলি যখন সংযুক্ত করাaxis=0 (সূচী প্রসারিত) ।
এই কীগুলি, MultiIndexসূচক বৈশিষ্ট্যে কোনও অবজেক্টের নতুন প্রাথমিক স্তরে পরিণত হয় ।
pd.concat([s1, s2, s3], keys=['A', 'B', 'C']) pd.concat([s1, s2], keys=['A', 'B'])
---------------------------------------------- -------------------------------------
A 2 1 A 2 1
3 2 3 2
B 1 3 B 1 3
2 4 2 4
C 1 5 dtype: int64
3 6
dtype: int64
যাইহোক, আমরা keysআরও গভীরতর তৈরি করতে আর্গুমেন্টে স্কেলারের মানগুলির চেয়ে বেশি ব্যবহার করতে পারি MultiIndex। এখানে আমরা tuplesদৈর্ঘ্যের 2 টি পেরেকের দুটি নতুন স্তরের প্রিপেন্ড করলাম MultiIndex:
pd.concat(
[s1, s2, s3],
keys=[('A', 'X'), ('A', 'Y'), ('B', 'X')])
-----------------------------------------------
A X 2 1
3 2
Y 1 3
2 4
B X 1 5
3 6
dtype: int64
axis=1
কলামগুলি বর্ধিত করার সময় এটি কিছুটা আলাদা। যখন আমরা ব্যবহার করি axis=0(উপরে দেখুন) বিদ্যমান সূচক ছাড়াও স্তর keysহিসাবে আমাদের অভিনয় MultiIndexকরে। কারণ axis=1, আমরা এমন একটি অক্ষরকে উল্লেখ করছি যা Seriesঅবজেক্টগুলি নেই, যথা columnsগুণাবলী।
দুটি
Serieswtih এর প্রকরণ
axis=1
লক্ষ্য করুন যে নামকরণ s1এবং s2বিষয়গুলি যতক্ষণ না keysপাস হয় ততক্ষণ তা পাস করা হয় তবে তা ওভাররাইড keysহয়ে যায়।
| | | pd.concat(
| pd.concat( | pd.concat( | [s1.rename('U'),
pd.concat( | [s1, s2], | [s1.rename('U'), | s2.rename('V')],
[s1, s2], | axis=1, | s2.rename('V')], | axis=1,
axis=1) | keys=['X', 'Y']) | axis=1) | keys=['X', 'Y'])
-------------- | --------------------- | ---------------------- | ----------------------
0 1 | X Y | U V | X Y
1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0
2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0
3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN
MultiIndexসাথে
Seriesএবং
axis=1
pd.concat(
[s1, s2],
axis=1,
keys=[('W', 'X'), ('W', 'Y')])
-----------------------------------
W
X Y
1 NaN 3.0
2 1.0 4.0
3 2.0 NaN
দুই
DataFrame সঙ্গে
axis=1
উদাহরণস্বরূপ axis=0, keysএকটিতে স্তরগুলি যুক্ত করুন MultiIndex, তবে এবার গুনটির মধ্যে থাকা অবজেক্টটিতে columns।
pd.concat( | pd.concat(
[d1, d2], | [d1, d2],
axis=1, | axis=1,
keys=['X', 'Y']) | keys=[('First', 'X'), ('Second', 'X')])
------------------------------- | --------------------------------------------
X Y | First Second
A B C B C D | X X
1 NaN NaN NaN 0.4 0.5 0.6 | A B C B C D
2 0.1 0.2 0.3 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN | 2 0.1 0.2 0.3 0.4 0.5 0.6
| 3 0.1 0.2 0.3 NaN NaN NaN
Series এবং
DataFrame সাথে
axis=1
এটা কৌতুকপূর্ণ। এই ক্ষেত্রে, স্কেলার মূল মানটি Seriesযখন কলামে পরিণত হয় তখন এটির জন্য সূচকের একমাত্র স্তর হিসাবে কাজ করতে পারে না এবং এটির জন্য প্রথম স্তরের হিসাবে কাজ MultiIndexকরে DataFrame। সুতরাং পান্ডস আবার কলামের নাম হিসাবে উত্সটির nameবৈশিষ্ট্যটি ব্যবহার করবেন Series।
pd.concat( | pd.concat(
[s1, d1], | [s1.rename('Z'), d1],
axis=1, | axis=1,
keys=['X', 'Y']) | keys=['X', 'Y'])
--------------------- | --------------------------
X Y | X Y
0 A B C | Z A B C
2 1 0.1 0.2 0.3 | 2 1 0.1 0.2 0.3
3 2 0.1 0.2 0.3 | 3 2 0.1 0.2 0.3
সীমাবদ্ধতা
keysএবং
MultiIndexঅনুমান।
পান্ডস কেবল নাম থেকে কলামের নামগুলি অনুমান করে বলে মনে হয় Series, তবে বিভিন্ন ফ্রেমের কলাম স্তরের সাথে ডেটা ফ্রেমের সাথে অ্যানালগাসমুক্ত কনটেন্টেশন করার সময় এটি শূন্যস্থান পূরণ করবে না।
d1_ = pd.concat(
[d1], axis=1,
keys=['One'])
d1_
One
A B C
2 0.1 0.2 0.3
3 0.1 0.2 0.3
এরপরে কলামের অবজেক্টের মাত্র এক স্তর সহ অন্য একটি ডেটা ফ্রেমের সাথে এটি যুক্ত করুন এবং পান্ডস বস্তুর টিপলগুলি চেষ্টা করতে এবং অস্বীকার করবে MultiIndexএবং সমস্ত ডেটা ফ্রেমগুলিকে একত্রিত করবে যেন একক স্তরের অবজেক্টস, স্কেলার এবং টিপলস।
pd.concat([d1_, d2], axis=1)
(One, A) (One, B) (One, C) B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
A এর dictপরিবর্তে পাস করাlist
অভিধান পাস করার সময়, অভিধান pandas.concatথেকে কীগুলি keysপরামিতি হিসাবে ব্যবহার করবে ।
pd.concat( | pd.concat(
{0: d1, 1: d2}) | {0: d1, 1: d2}, axis=1)
----------------------- | -------------------------------
A B C D | 0 1
0 2 0.1 0.2 0.3 NaN | A B C B C D
3 0.1 0.2 0.3 NaN | 1 NaN NaN NaN 0.4 0.5 0.6
1 1 NaN 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
levels
এটি keysআর্গুমেন্টের সাথে একযোগে ব্যবহৃত হয় W levelsযখন এর ডিফল্ট মান হিসাবে রেখে যায় None, পান্ডস ফলাফলের প্রতিটি স্তরের অনন্য মান গ্রহণ করবে MultiIndexএবং ফলস্বরূপ index.levelsবৈশিষ্ট্যে ব্যবহৃত অবজেক্ট হিসাবে এটি ব্যবহার করবে ।
স্তরসমূহ : সিকোয়েন্সগুলির তালিকা, ডিফল্ট কিছুই নয়
একটি মাল্টিআইডেক্স তৈরির জন্য নির্দিষ্ট স্তরের (অনন্য মান)। অন্যথায় তারা কীগুলি থেকে অনুমান করা হবে।
যদি পান্ডগণ ইতিমধ্যে এই স্তরগুলির কী হওয়া উচিত তা নির্ধারণ করে থাকেন তবে এটিকে আমাদের নির্দিষ্ট করে দেওয়ার কী সুবিধা আছে? আমি এর একটি উদাহরণ দেখাব এবং এটি কী কারণে কার্যকর হতে পারে তার অন্যান্য কারণগুলি ভাবার জন্য এটি ছেড়ে দেব।
উদাহরণ
ডকুমেন্টেশন প্রতি, levels যুক্তি ক্রমগুলির তালিকা of এর অর্থ হ'ল আমরা pandas.Indexসেই ক্রমগুলির মধ্যে একটি হিসাবে অন্যটিকে ব্যবহার করতে পারি ।
ডেটা ফ্রেমটি বিবেচনা করুন dfযা এর উপসংহার d1, d2এবং andd3 :
df = pd.concat(
[d1, d2, d3], axis=1,
keys=['First', 'Second', 'Fourth'])
df
First Second Fourth
A B C B C D A B D
1 NaN NaN NaN 0.4 0.5 0.6 0.7 0.8 0.9
2 0.1 0.2 0.3 0.4 0.5 0.6 NaN NaN NaN
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
কলামগুলির অবজেক্টের স্তরগুলি হ'ল:
print(df, *df.columns.levels, sep='\n')
Index(['First', 'Second', 'Fourth'], dtype='object')
Index(['A', 'B', 'C', 'D'], dtype='object')
আমরা যদি sumএকটি মধ্যে ব্যবহারgroupby পাই এর করি তবে:
df.groupby(axis=1, level=0).sum()
First Fourth Second
1 0.0 2.4 1.5
2 0.6 0.0 1.5
3 0.6 2.4 0.0
তবে এর পরিবর্তে যদি ['First', 'Second', 'Fourth']আরও একটি অনুপস্থিত বিভাগের নামকরণ হয় Thirdএবং Fifth? এবং আমি এগুলিকে এ এর ফলাফলের সাথে অন্তর্ভুক্ত করতে চেয়েছিলামgroupby একত্রিত ? আমরা যদি এটি করতে পারি তবে আমরা এটি করতে পারি pandas.CategoricalIndex। এবং আমরা যে সময়ের সাথে এটি আগে উল্লেখ করতে পারিlevels আর্গুমেন্ট ।
সুতরাং পরিবর্তে, এর সংজ্ঞা দেওয়া যাক df:
cats = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
lvl = pd.CategoricalIndex(cats, categories=cats, ordered=True)
df = pd.concat(
[d1, d2, d3], axis=1,
keys=['First', 'Second', 'Fourth'],
levels=[lvl]
)
df
First Fourth Second
1 0.0 2.4 1.5
2 0.6 0.0 1.5
3 0.6 2.4 0.0
তবে কলামগুলির অবজেক্টের প্রথম স্তরটি হ'ল:
df.columns.levels[0]
CategoricalIndex(
['First', 'Second', 'Third', 'Fourth', 'Fifth'],
categories=['First', 'Second', 'Third', 'Fourth', 'Fifth'],
ordered=True, dtype='category')
এবং আমাদের groupbyসংক্ষেপটি দেখে মনে হচ্ছে:
df.groupby(axis=1, level=0).sum()
First Second Third Fourth Fifth
1 0.0 1.5 0.0 2.4 0.0
2 0.6 1.5 0.0 0.0 0.0
3 0.6 0.0 0.0 2.4 0.0
names
এটি ফলাফলের স্তরের নামকরণ করতে ব্যবহৃত হয় MultiIndex। namesতালিকার দৈর্ঘ্য ফলাফলের স্তরের সংখ্যার সাথে মেলে MultiIndex।
নাম : তালিকা, ডিফল্ট কিছুই নয়
ফলাফল ফলাফলক্রমক্রমিক সূচকের স্তরের জন্য নাম
pd.concat( | pd.concat(
[d1, d2], | [d1, d2],
keys=[0, 1], | axis=1, keys=[0, 1],
names=['lvl0', 'lvl1']) | names=['lvl0', 'lvl1'])
----------------------------- | ----------------------------------
A B C D | lvl0 0 1
lvl0 lvl1 | lvl1 A B C B C D
0 2 0.1 0.2 0.3 NaN | 1 NaN NaN NaN 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN | 2 0.1 0.2 0.3 0.4 0.5 0.6
1 1 NaN 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
2 NaN 0.4 0.5 0.6 |
verify_integrity
স্ব বর্ণনামূলক ডকুমেন্টেশন
যাচাই_সংহততা : বুলিয়ান, ডিফল্ট মিথ্যা
নতুন সদৃশ রয়েছে কিনা তা পরীক্ষা করুন। এটি সত্যিকারের ডেটা কনটেন্টেশনের তুলনায় খুব ব্যয়বহুল হতে পারে।
যেহেতু ফলাফলকে সূচকটি একত্রিত করে d1এবং d2অনন্য নয়, এটি অখণ্ডতা পরীক্ষায় ব্যর্থ হবে।
pd.concat([d1, d2])
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
এবং
pd.concat([d1, d2], verify_integrity=True)
> মানমূল: সূচকের ওভারল্যাপিংয়ের মান রয়েছে: [২]