আমি কলাম সহ একটি dataframe আছে A, B। আমাকে Cপ্রতিটি কলাম / সারির জন্য এমন একটি কলাম তৈরি করতে হবে :
C = max(A, B)।
আমি কীভাবে এটি করা উচিত?
উত্তর:
আপনি এই জাতীয় সর্বোচ্চ পেতে পারেন:
>>> 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)খুব ব্যবহার করতে পারে , আমার ধারণা।
@ ডিএসএম এর উত্তর প্রায় কোনও সাধারণ পরিস্থিতিতে পুরোপুরি ঠিক আছে 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.reduce। numpy.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)
.apply(max, axis=1)এর চেয়ে অনেক ধীর.max(axis=1)