একটি একক চলকের জন্য ফ্রিকোয়েন্সি টেবিল


98

দিনের জন্য একটি সর্বশেষ নবাগত পান্ডাস প্রশ্ন: আমি কীভাবে একটি একক সিরিজের জন্য একটি টেবিল তৈরি করতে পারি?

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

my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )

>> {
     1 : 1,
     2 : 2, 
     3 : 3
   }

প্রচুর গুগলিং আমাকে সিরিজ.ডেসক্রাইব () এবং প্যান্ডাস ক্রসস্ট্যাবগুলিতে নিয়ে গেছে, তবে এর মধ্যে দুটিই আমার যা প্রয়োজন তা পুরোপুরি করে না: একটি পরিবর্তনশীল, বিভাগ অনুসারে গণনা করে। ওহ, এবং এটি খুব ভাল লাগত যদি এটি বিভিন্ন ডেটা ধরণের: স্ট্রিংস, ইনটস ইত্যাদির জন্য কাজ করে

উত্তর:


153

হতে পারে .value_counts()?

>>> import pandas
>>> my_series = pandas.Series([1,2,2,3,3,3, "fred", 1.8, 1.8])
>>> my_series
0       1
1       2
2       2
3       3
4       3
5       3
6    fred
7     1.8
8     1.8
>>> counts = my_series.value_counts()
>>> counts
3       3
2       2
1.8     2
fred    1
1       1
>>> len(counts)
5
>>> sum(counts)
9
>>> counts["fred"]
1
>>> dict(counts)
{1.8: 2, 2: 2, 3: 3, 1: 1, 'fred': 1}

5
.value_counts().sort_index(1), প্রথম কলামটি সম্ভবত সামান্য বাইরে-অর্ডার হওয়া রোধ করতে
স্মি

9
সিরিজ না করে ডেটাফ্রেমের সমতুল্য কি আছে? আমি একটি df .value_counts () চালানোর চেষ্টা করেছিলাম এবং পেয়েছিAttributeError: 'DataFrame' object has no attribute 'value_counts'
মিটেনচপস

4
এই গণনাগুলিকে অনুপাতে রূপান্তর করার কোন সহজ উপায় আছে?
dsaxton

7
@ ডিএসএক্সটনে আপনি ফলাফলগুলিকে অনুপাতে রূপান্তর করতে .value_counts (স্বাভাবিক করুন = সত্য) ব্যবহার করতে পারেন
ম্যাক্স পাওয়ার

4
- এর পরিবর্তে একটি dataframe উপর এটি ব্যবহার করার জন্য, এটা পরিবর্তিত সমতুল্য 1-ডি numpy অ্যারের উপস্থাপনা, মত pd.value_counts(df.values.ravel())যা একটি সিরিজ যার ফেরৎ indexএবং valuesবৈশিষ্ট্যাবলী যথাক্রমে অনন্য উপাদান এবং তাদের সংখ্যা আছে।
নিকিল মাভেলি

11

আপনি যেমন কলামগুলির ফ্রিকোয়েন্সি গণনা করতে একটি ডেটাফ্রেমে তালিকা বোধগম্য ব্যবহার করতে পারেন

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]

ভাঙ্গন:

my_series.select_dtypes(include=['O']) 

কেবল শ্রেণিবদ্ধ ডেটা নির্বাচন করে

list(my_series.select_dtypes(include=['O']).columns) 

উপরের কলামগুলিকে একটি তালিকায় পরিণত করে

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)] 

উপরের তালিকার মাধ্যমে আইট্রেট করে এবং প্রতিটি কলামে মান_কাউন্ট () প্রয়োগ করে


5

@ ডিএসএম দ্বারা প্রদত্ত উত্তরটি সহজ এবং সোজা, তবে আমি ভেবেছিলাম যে আমি এই প্রশ্নটিতে আমার নিজের ইনপুট যুক্ত করব। আপনি যদি পান্ডাস.ভ্যালু_ অ্যাকাউন্টগুলির কোডটি দেখেন তবে আপনি দেখতে পাচ্ছেন যে এখানে অনেক কিছু চলছে।

আপনার যদি অনেকগুলি সিরিজের ফ্রিকোয়েন্সি গণনা করতে হয় তবে এটি কিছুটা সময় নিতে পারে। একটি দ্রুত বাস্তবায়ন হ'ল numpy.unique ব্যবহার করাreturn_counts = True

এখানে একটি উদাহরণ:

import pandas as pd
import numpy as np

my_series = pd.Series([1,2,2,3,3,3])

print(my_series.value_counts())
3    3
2    2
1    1
dtype: int64

এখানে লক্ষ্য করুন যে ফিরিয়ে দেওয়া আইটেমটি একটি পান্ডাস S সিরিজ

তুলনায়, numpy.uniqueদুটি আইটেম, অনন্য মান এবং গণনা সহ একটি টুপল দেয় returns

vals, counts = np.unique(my_series, return_counts=True)
print(vals, counts)
[1 2 3] [1 2 3]

এরপরে আপনি এগুলি একটি অভিধানে একত্রিত করতে পারেন:

results = dict(zip(vals, counts))
print(results)
{1: 1, 2: 2, 3: 3}

এবং তারপর একটি মধ্যে pandas.Series

print(pd.Series(results))
1    1
2    2
3    3
dtype: int64

0

অতিরিক্ত মান সহ একটি ভেরিয়েবলের ফ্রিকোয়েন্সি বিতরণের জন্য আপনি ক্লাসে মানগুলি ভেঙে ফেলতে পারেন,

এখানে আমি employrateভেরিয়েবলের জন্য অতিরিক্ত মূল্যবোধ করি এবং এর সাথে প্রত্যক্ষ সহ ফ্রিকোয়েন্সি বিতরণের কোনও অর্থ হয় নাvalues_count(normalize=True)

                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
..                  ...         ...            ...
208             Vietnam   71.000000           3.91
209  West Bank and Gaza   32.000000               
210         Yemen, Rep.   39.000000             .2
211              Zambia   61.000000           3.56
212            Zimbabwe   66.800003           4.96

[213 rows x 3 columns]

values_count(normalize=True)শ্রেণিবিন্যাস সহ ফ্রিকোয়েন্সি বিতরণ , ফলাফলের দৈর্ঘ্য এখানে 139 (ফ্রিকোয়েন্সি বিতরণ হিসাবে অর্থহীন বলে মনে হচ্ছে):

print(gm["employrate"].value_counts(sort=False,normalize=True))

50.500000   0.005618
61.500000   0.016854
46.000000   0.011236
64.500000   0.005618
63.500000   0.005618

58.599998   0.005618
63.799999   0.011236
63.200001   0.005618
65.599998   0.005618
68.300003   0.005618
Name: employrate, Length: 139, dtype: float64

শ্রেণিবিন্যাস স্থাপন আমরা একটি নির্দিষ্ট পরিসরের সাথে সমস্ত মান স্থাপন।

0-10 হিসাবে 1,
11-20 হিসাবে 2  
21-30 হিসাবে 3, এবং আরও
gm["employrate"]=gm["employrate"].str.strip().dropna()  
gm["employrate"]=pd.to_numeric(gm["employrate"])
gm['employrate'] = np.where(
   (gm['employrate'] <=10) & (gm['employrate'] > 0) , 1, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=20) & (gm['employrate'] > 10) , 1, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=30) & (gm['employrate'] > 20) , 2, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=40) & (gm['employrate'] > 30) , 3, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=50) & (gm['employrate'] > 40) , 4, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=60) & (gm['employrate'] > 50) , 5, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=70) & (gm['employrate'] > 60) , 6, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=80) & (gm['employrate'] > 70) , 7, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=90) & (gm['employrate'] > 80) , 8, gm['employrate']
   )
gm['employrate'] = np.where(
   (gm['employrate'] <=100) & (gm['employrate'] > 90) , 9, gm['employrate']
   )
print(gm["employrate"].value_counts(sort=False,normalize=True))

শ্রেণিবদ্ধের পরে আমাদের স্পষ্ট ফ্রিকোয়েন্সি বিতরণ রয়েছে। এখানে আমরা সহজেই দেখতে পাচ্ছি যে 37.64%দেশগুলির মধ্যে কাজের হার রয়েছে 51-60% এবং 11.79%দেশগুলির মধ্যে কাজের হার রয়েছে71-80%

5.000000   0.376404
7.000000   0.117978
4.000000   0.179775
6.000000   0.264045
8.000000   0.033708
3.000000   0.028090
Name: employrate, dtype: float64
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.