কীভাবে পান্ডাস ডেটাফ্রেমের সূচকে একটি কলামে রূপান্তর করা যায়?


454

এটি বরং সুস্পষ্ট বলে মনে হচ্ছে, তবে আমি কীভাবে ডেটা ফ্রেমের সূচকে একটি কলামে রূপান্তর করব তা অনুভব করতে পারি না?

উদাহরণ স্বরূপ:

df=
        gi       ptt_loc
 0  384444683      593  
 1  384444684      594 
 2  384444686      596  

প্রতি,

df=
    index1    gi       ptt_loc
 0  0     384444683      593  
 1  1     384444684      594 
 2  2     384444686      596  

উত্তর:


760

করুন:

df['index1'] = df.index

বা .reset_index,:

df.reset_index(level=0, inplace=True)

সুতরাং, যদি আপনার 3 স্তরের সূচকযুক্ত মাল্টি-ইনডেক্স ফ্রেম থাকে তবে:

>>> df
                       val
tick       tag obs        
2016-02-26 C   2    0.0139
2016-02-27 A   2    0.5577
2016-02-28 C   6    0.0303

এবং আপনি সূচকে প্রথম ( tick) এবং তৃতীয় ( obs) স্তরকে কলামগুলিতে রূপান্তর করতে চান , আপনি এটি করবেন:

>>> df.reset_index(level=['tick', 'obs'])
          tick  obs     val
tag                        
C   2016-02-26    2  0.0139
A   2016-02-27    2  0.5577
C   2016-02-28    6  0.0303

4
মনে রাখবেন যে আপনার প্রতিটি সূচকের জন্য আপনাকে এই এন বার করতে হবে (যেমন আপনার যদি দুটি সূচক থাকে তবে আপনাকে এটি দুটিবার করতে হবে)
ডভাল

34
যে df.reset_index(level=df.index.names, inplace=True)কোনও একটি প্রদত্ত পুরো মাল্টিইন্ডেক্সকে কলামগুলিতে রূপান্তর করতে পারে
ভেন্টি

2
আপনি যে কলামটিতে স্রেফ ডেটাফ্রেমে যুক্ত করেছেন তাই কোনও সত্যিকারের কলাম এবং একটি সূচক থাকতে পারে?
bretcj7

2
আপনি যদি একটি সম্পূর্ণ মাল্টিইন্ডেক্স রূপান্তর করতে চান তবে কেবলমাত্র ব্যবহার করুন df.reset_index(), যা সূচকের সম্পূর্ণতাকে কলামগুলিতে (প্রতিটি স্তরের স্তরে) সরায় এবং 0 থেকে লেন (ডিএফ) -1
বালপয়েন্টপেন

2
একটি কলামে অ্যাসাইনমেন্ট, উদাহরণস্বরূপ df['index1'] = df.indexএকটি সতর্কতা ফেরত: "একটি ডেটা ফ্রেমের একটি স্লাইসের অনুলিপিতে একটি মান সেট করার চেষ্টা করা হচ্ছে।" পরিবর্তে df.assign () ফাংশনটি ব্যবহার করুন, যেমন নীচে দেখানো হয়েছে।
জন মার্ক

36

মাল্টিআইএনডেক্সের জন্য আপনি এর সাব-ইনডেক্স ব্যবহার করে উত্তোলন করতে পারেন

df['si_name'] = R.index.get_level_values('si_name') 

যেখানে si_namesubindex নাম।


26

আরও কিছুটা স্পষ্টতা দেওয়ার জন্য, এর সূচকে দুটি স্তরের (একটি মাল্টিআইডেক্স) একটি ডেটা ফ্রেমটি দেখি।

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
                                    ['North', 'South']], 
                                   names=['State', 'Direction'])

df = pd.DataFrame(index=index, 
                  data=np.random.randint(0, 10, (6,4)), 
                  columns=list('abcd'))

এখানে চিত্র বর্ণনা লিখুন

reset_indexপদ্ধতি, ডিফল্ট পরামিতি সঙ্গে বলা, কলাম সব সূচক মাত্রা পরিবর্তন করে এবং একটি সহজ ব্যবহার RangeIndexনতুন সূচক হিসাবে।

df.reset_index()

এখানে চিত্র বর্ণনা লিখুন

levelকোন সূচক স্তরগুলি কলামে রূপান্তরিত হয় তা নিয়ন্ত্রণ করতে পরামিতি ব্যবহার করুন । যদি সম্ভব হয় তবে স্তরটির নামটি ব্যবহার করুন যা আরও স্পষ্ট। যদি কোনও স্তরের নাম না থাকে তবে আপনি প্রতিটি স্তরটিকে তার পূর্ণসংখ্যার অবস্থান দ্বারা উল্লেখ করতে পারেন, যা বাইরে থেকে 0 থেকে শুরু হয়। আপনি এখানে একটি স্কেলারের মান বা আপনি পুনরায় সেট করতে চান এমন সমস্ত সূচকগুলির একটি তালিকা ব্যবহার করতে পারেন।

df.reset_index(level='State') # same as df.reset_index(level=0)

এখানে চিত্র বর্ণনা লিখুন

বিরল ইভেন্টে আপনি সূচকটি সংরক্ষণ করতে এবং সূচিকে একটি কলামে রূপান্তর করতে চান, আপনি নিম্নলিখিতটি করতে পারেন:

# for a single level
df.assign(State=df.index.get_level_values('State'))

# for all levels
df.assign(**df.index.to_frame())

15

rename_axis + + reset_index

আপনি প্রথমে আপনার সূচকটির পছন্দসই লেবেলে নাম পরিবর্তন করতে পারেন, তারপরে একটি সিরিজে উন্নীত করতে পারেন:

df = df.rename_axis('index1').reset_index()

print(df)

   index1         gi  ptt_loc
0       0  384444683      593
1       1  384444684      594
2       2  384444686      596

এটি MultiIndexডেটাফ্রেমগুলির জন্যও কাজ করে :

print(df)
#                        val
# tick       tag obs        
# 2016-02-26 C   2    0.0139
# 2016-02-27 A   2    0.5577
# 2016-02-28 C   6    0.0303

df = df.rename_axis(['index1', 'index2', 'index3']).reset_index()

print(df)

       index1 index2  index3     val
0  2016-02-26      C       2  0.0139
1  2016-02-27      A       2  0.5577
2  2016-02-28      C       6  0.0303

4

আপনি যদি reset_indexপদ্ধতিটি ব্যবহার করতে চান এবং আপনার বিদ্যমান সূচকটি সংরক্ষণ করতে চান তবে আপনার ব্যবহার করা উচিত:

df.reset_index().set_index('index', drop=False)

বা এটি জায়গায় পরিবর্তন করতে:

df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)

উদাহরণ স্বরূপ:

print(df)
          gi  ptt_loc
0  384444683      593
4  384444684      594
9  384444686      596

print(df.reset_index())
   index         gi  ptt_loc
0      0  384444683      593
1      4  384444684      594
2      9  384444686      596

print(df.reset_index().set_index('index', drop=False))
       index         gi  ptt_loc
index
0          0  384444683      593
4          4  384444684      594
9          9  384444686      596

এবং আপনি যদি সূচীর লেবেল থেকে মুক্তি পেতে চান তবে আপনি এটি করতে পারেন:

df2 = df.reset_index().set_index('index', drop=False)
df2.index.name = None
print(df2)
   index         gi  ptt_loc
0      0  384444683      593
4      4  384444684      594
9      9  384444686      596

2
df1 = pd.DataFrame({"gi":[232,66,34,43],"ptt":[342,56,662,123]})
p = df1.index.values
df1.insert( 0, column="new",value = p)
df1

    new     gi     ptt
0    0      232    342
1    1      66     56 
2    2      34     662
3    3      43     123

5
আপনি কেন উত্তরটি বিদ্যমান উত্তরগুলির চেয়ে ভাল বলে মনে করেন সে সম্পর্কে আমি কিছু আলোচনার পরামর্শ দেওয়ার পরামর্শ দিচ্ছি ...
dmcgrandle

0

এটি করার একটি খুব সহজ উপায় হ'ল রিসেট_ইন্ডেক্স () পদ্ধতিটি ব্যবহার করুন a একটি ডেটা ফ্রেমের জন্য df নীচের কোডটি ব্যবহার করুন:

df.reset_index(inplace=True)

এইভাবে, সূচকটি একটি কলামে পরিণত হবে এবং সত্য হিসাবে স্থানটি ব্যবহার করে এটি স্থায়ী পরিবর্তন হয়ে উঠবে।


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