পান্ডার সাহায্যে সর্বাধিক দুই বা ততোধিক কলাম সন্ধান করুন


101

আমি কলাম সহ একটি dataframe আছে A, B। আমাকে Cপ্রতিটি কলাম / সারির জন্য এমন একটি কলাম তৈরি করতে হবে :

C = max(A, B)

আমি কীভাবে এটি করা উচিত?

উত্তর:


191

আপনি এই জাতীয় সর্বোচ্চ পেতে পারেন:

>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
>>> df
   A  B
0  1 -2
1  2  8
2  3  1
>>> df[["A", "B"]]
   A  B
0  1 -2
1  2  8
2  3  1
>>> df[["A", "B"]].max(axis=1)
0    1
1    8
2    3

এবং তাই:

>>> df["C"] = df[["A", "B"]].max(axis=1)
>>> df
   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3

আপনি যদি জানেন যে "এ" এবং "বি" একমাত্র কলাম, আপনি এমনকি এড়িয়ে যেতে পারেন

>>> df["C"] = df.max(axis=1)

এবং আপনি .apply(max, axis=1)খুব ব্যবহার করতে পারে , আমার ধারণা।


4
.apply(max, axis=1)এর চেয়ে অনেক ধীর.max(axis=1)
রাজেশএম

28

@ ডিএসএম এর উত্তর প্রায় কোনও সাধারণ পরিস্থিতিতে পুরোপুরি ঠিক আছে fine তবে আপনি যদি এমন ধরণের প্রোগ্রামার হয়ে থাকেন যে سطحের স্তরের চেয়ে কিছুটা গভীর যেতে চায় তবে আপনি জানতে আগ্রহী হতে পারেন যে সরাসরি পরিবর্তে আন্ডারলাইংয়ে .to_numpy()(বা .values<0.24 এর জন্য) অ্যারে ফাংশন কল করা কিছুটা দ্রুত ডেটাফ্রেম / সিরিজ অবজেক্টে সংজ্ঞায়িত (সিথোনাইজড) ফাংশনগুলিকে কল করা।

উদাহরণস্বরূপ, আপনি ndarray.max()প্রথম অক্ষ বরাবর ব্যবহার করতে পারেন ।

# Data borrowed from @DSM's post.
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
df
   A  B
0  1 -2
1  2  8
2  3  1

df['C'] = df[['A', 'B']].values.max(1)
# Or, assuming "A" and "B" are the only columns, 
# df['C'] = df.values.max(1) 
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3 

যদি আপনার ডেটাগুলি থাকে তবে আপনার NaNপ্রয়োজন হবে numpy.nanmax:

df['C'] = np.nanmax(df.values, axis=1)
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3 

আপনি ব্যবহার করতে পারেন numpy.maximum.reducenumpy.maximumএকটি ufunc (ইউনিভার্সাল ফাংশন) , এবং প্রতিটি ufunc একটি আছেreduce :

df['C'] = np.maximum.reduce(df['A', 'B']].values, axis=1)
# df['C'] = np.maximum.reduce(df[['A', 'B']], axis=1)
# df['C'] = np.maximum.reduce(df, axis=1)
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3

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

np.maximum.reduceএবং np.maxকম-বেশি একই হিসাবে দেখা যায় (বেশিরভাগ সাধারণ আকারের ডেটাফ্রেমগুলির জন্য) - এবং এর চেয়ে ছায়া দ্রুত হয় DataFrame.max। আমি ধারণা করি এই পার্থক্যটি প্রায় স্থির থাকে এবং এটি অভ্যন্তরীণ ওভারহেডের কারণে হয় (আনুষাঙ্গিক সূচিকরণ, এনএএনএস পরিচালনা, ইত্যাদি) etc

গ্রাফটি পারফ্লোট ব্যবহার করে তৈরি করা হয়েছিল । রেফারেন্সের জন্য বেঞ্চমার্কিং কোড:

import pandas as pd
import perfplot

np.random.seed(0)
df_ = pd.DataFrame(np.random.randn(5, 1000))

perfplot.show(
    setup=lambda n: pd.concat([df_] * n, ignore_index=True),
    kernels=[
        lambda df: df.assign(new=df.max(axis=1)),
        lambda df: df.assign(new=df.values.max(1)),
        lambda df: df.assign(new=np.nanmax(df.values, axis=1)),
        lambda df: df.assign(new=np.maximum.reduce(df.values, axis=1)),
    ],
    labels=['df.max', 'np.max', 'np.maximum.reduce', 'np.nanmax'],
    n_range=[2**k for k in range(0, 15)],
    xlabel='N (* len(df))',
    logx=True,
    logy=True)

ছোট টাইপো: "ডিএফ ['সি'] = এনপি.ম্যাক্সিমাম.ড্রেস (ডিএফ ['এ', 'বি']]। মান, অক্ষ = 1)" "ডিএফ ['সি'] = এনপি.ম্যাক্সিমামমাম হওয়া উচিত। (। df প্রয়োগ [[ 'এ', 'বি']] মূল্যবোধ, অক্ষ = 1) "কমাতে
Velizar VESSELINOV
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.