পান্ডাস ডেটা ফ্রেম: শর্তের ভিত্তিতে একটি কলামে সমস্ত মান প্রতিস্থাপন করুন


132

আমার নীচের মতো একটি সাধারণ ডেটাফ্রেম রয়েছে:

পান্ডস ডেটা ফ্রেম

আমি 'প্রথম মরশুম' কলাম থেকে সমস্ত মান নির্বাচন করতে চাই এবং 1990 এর চেয়ে বেশি বয়সী 1 টি প্রতিস্থাপন করতে চাই example উদাহরণস্বরূপ, কেবল বাল্টিমোর রেভেনস ১৯৯ 1996 এর পরিবর্তে ১ দ্বারা স্থান পরিবর্তন করবেন (বাকী ডেটা অক্ষত রেখে)।

আমি নিম্নলিখিত ব্যবহার করেছি:

df.loc[(df['First Season'] > 1990)] = 1

তবে, এটি এই সারির সমস্ত মান 1 দ্বারা প্রতিস্থাপন করে এবং 'প্রথম মরসুম' কলামের মানগুলিই প্রতিস্থাপন করে না।

আমি কীভাবে সেই কলামটি থেকে মানগুলি প্রতিস্থাপন করতে পারি?

উত্তর:


226

আপনাকে সেই কলামটি নির্বাচন করতে হবে:

In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df

Out[41]:
                 Team  First Season  Total Games
0      Dallas Cowboys          1960          894
1       Chicago Bears          1920         1357
2   Green Bay Packers          1921         1339
3      Miami Dolphins          1966          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers          1950         1003

সুতরাং এখানে সিনট্যাক্সটি হ'ল:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

আপনি ডক্স এবং পান্ডাসের 10 মিনিটের জন্য যা শব্দার্থক শব্দগুলি দেখায় তা পরীক্ষা করতে পারেন

সম্পাদনা

আপনি যদি বুলিয়ান সূচক উত্পন্ন করতে চান তবে আপনি কেবল বুলিয়ান সিরিজ উত্পন্ন করতে বুলিয়ান শর্তটি ব্যবহার করতে পারেন এবং যথাক্রমে intরূপান্তরিত করতে এবং যথাক্রমে Trueএবং এটির জন্য টাইপটি টাইপ করতে Falseপারেন :10

In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df

Out[43]:
                 Team  First Season  Total Games
0      Dallas Cowboys             0          894
1       Chicago Bears             0         1357
2   Green Bay Packers             0         1339
3      Miami Dolphins             0          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers             0         1003

40

পার্টিতে কিছুটা দেরি হলেও তবুও - আমি ন্যাপি ব্যবহার করা পছন্দ করি যেখানে:

import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])

2
আমি শর্তাধীন কলামের মানগুলিকে ওভাররাইটিংয়ের জন্য একটি সমাধান খুঁজছিলাম, তবে অন্য কলামের মানের উপর ভিত্তি করে, এরকম: df ['col1'] = np.where (df ['id'] == '318431682259014', 'NEW', df ['col1']) এটি এর সমাধান ছিল।
ব্যবহারকারী582175

আমি এই জাতীয় একাধিক শর্তের জন্য এটি করার চেষ্টা করছি, তবে আমি পাচ্ছি ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()। আমি যা করার চেষ্টা করছি তা মূলত df['A'] = np.where(df['B'] in some_values, df['A']*2, df['A]। এই সম্পর্কে কারও কি ধারণা আছে?
এম.শাল্ক

5
df['First Season'].loc[(df['First Season'] > 1990)] = 1

আশ্চর্যজনক যে কারও কাছে এই উত্তর নেই, আপনার কোডের একমাত্র অনুপস্থিত অংশটি হ'ল ডিফের ঠিক পরে ['প্রথম মরসুম'] এবং কেবল আপনার কোঁকড়ানো বন্ধনীগুলি সরিয়ে ফেলুন।


এটি একটি 'সেটিংবিথকপি ওয়ার্নিং দেয়:' পুরো জিনিসটির জন্য এডচমের উত্তরের মতো .loc ব্যবহার করা ভাল।
উচ্চাভিলাষী

2

একক অবস্থার জন্য, যেমন। ( 'employrate'] > 70 )

       country        employrate alcconsumption
0  Afghanistan  55.7000007629394            .03
1      Albania  51.4000015258789           7.29
2      Algeria              50.5            .69
3      Andorra                            10.17
4       Angola  75.6999969482422           5.57

এটা ব্যবহার কর:

df.loc[df['employrate'] > 70, 'employrate'] = 7

       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   51.400002           7.29
2      Algeria   50.500000            .69
3      Andorra         nan          10.17
4       Angola    7.000000           5.57

সুতরাং বাক্য গঠন এখানে:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

একাধিক শর্তের জন্য। (df['employrate'] <=55) & (df['employrate'] > 50)

এটা ব্যবহার কর:

df['employrate'] = np.where(
   (df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate']
   )

out[108]:
       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   11.000000           7.29
2      Algeria   11.000000            .69
3      Andorra         nan          10.17
4       Angola   75.699997           5.57

সুতরাং বাক্য গঠন এখানে:

 df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name'])

0
df.loc[df['First season'] > 1990, 'First Season'] = 1

ব্যাখ্যা:

df.loc'সারি সূচক' এবং 'কলাম সূচক' দুটি আর্গুমেন্ট নেয়। আমরা "প্রথম মৌসুম" কলামের অধীনে প্রতিটি সারি মানের 27 এর চেয়ে বেশি মান কিনা তা আমরা যাচাই করছি এবং তারপরে আমরা এটি 1 দিয়ে প্রতিস্থাপন করব।

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