নিজের জন্য এই প্রশ্নের উত্তর দেওয়ার প্রক্রিয়ায়, আমি অনেক কিছু শিখেছি এবং উদাহরণ এবং কিছু ব্যাখ্যা একটি ক্যাটালগ একসাথে রাখতে চেয়েছিলাম।
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
সূচকটি সূচকে প্রসারিত করে :d1
2
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
গুণাবলী।
দুটি
Series
wtih এর প্রকরণ
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)
> মানমূল: সূচকের ওভারল্যাপিংয়ের মান রয়েছে: [২]