পাইথন: পান্ডাস ডেটা ফ্রেমে কিছু সারি অ্যাপ্লায়ারে দুটি কলামের (ভেরিয়েবল) ভিত্তিতে একটি ফ্রিকোয়েন্সি গণনা পান


93

হ্যালো আমার কাছে নিম্নলিখিত ডেটাফ্রেম রয়েছে।

    Group           Size

    Short          Small
    Short          Small
    Moderate       Medium
    Moderate       Small
    Tall           Large

ডেটাফ্রেমে একই সারিতে কতবার উপস্থিতির ফ্রিকোয়েন্সি গণনা করতে চাই।

    Group           Size      Time

    Short          Small        2
    Moderate       Medium       1 
    Moderate       Small        1
    Tall           Large        1

4
কর্মক্ষমতার উপর মনে রাখবেন, বিকল্প অন্তর্ভুক্ত রয়েছে: series.value_counts বনাম পান্ডাস groupby.size বনাম collections.Counter একাধিক সিরিজের সঙ্গে
jpp

উত্তর:


145

আপনি গ্রুপবাই এর ব্যবহার করতে পারেন size:

In [11]: df.groupby(["Group", "Size"]).size()
Out[11]:
Group     Size
Moderate  Medium    1
          Small     1
Short     Small     2
Tall      Large     1
dtype: int64

In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time")
Out[12]:
      Group    Size  Time
0  Moderate  Medium     1
1  Moderate   Small     1
2     Short   Small     2
3      Tall   Large     1

7
ধন্যবাদ ফ্রিকোয়েন্সি ("সময়") এর উপর ভিত্তি করে শীর্ষ কে (= 20) মান বাছতে একটি ছোট সংযোজন: df.groupby (["গ্রুপ", "আকার"])। আকার () .sort_values ​​(= 'সময়' দ্বারা, আরোহী = মিথ্যা)
দিলিপ কুমার পাচিগোল্লা

4
কেবল লক্ষ্য করুন যে ডেটাফ্রেম করার .size()সময় ব্যবহার করে সিরিজটি ফিরে .size().reset_index(name="Time")আসবে। ধন্যবাদ অ্যান্ডি
আলেমল

অথবা আপনি df.groupby(by=["Group", "Size"], as_index=False).size()সহজেই করতে পারেন
নবীন কুমার

51

পান্ডাসের পরে আপডেট 1.1value_countsএখন একাধিক কলাম গ্রহণ করে accept

df.value_counts(["Group", "Size"])

আপনি চেষ্টা করতে পারেন pd.crosstab()

Group           Size

Short          Small
Short          Small
Moderate       Medium
Moderate       Small
Tall           Large

pd.crosstab(df.Group,df.Size)


Size      Large  Medium  Small
Group                         
Moderate      0       1      1
Short         0       0      2
Tall          1       0      0

সম্পাদনা: আপনার আউটপুট পেতে

pd.crosstab(df.Group,df.Size).replace(0,np.nan).\
     stack().reset_index().rename(columns={0:'Time'})
Out[591]: 
      Group    Size  Time
0  Moderate  Medium   1.0
1  Moderate   Small   1.0
2     Short   Small   2.0
3      Tall   Large   1.0

7
সুন্দর আপনি margins=Trueপ্রান্তিক সংখ্যা পেতে যোগ করতে পারেন!
ম্যাট হ্যানকক

0

অন্যান্য পজিবিবিলিটি ব্যবহার করছে .pivot_table()এবংaggfunc='size'

df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.