#solution if mising values are empty strings
print (df)
Name Class Marks1 Marks2
0 AA CC 10
1 AA CC 33
2 AA CC 21
3 AA CC 24
cols = ['Marks1','Marks2']
def f(x):
v = x.values
i = np.arange(v.shape[1])
a = (v == '').argsort(0, kind='mergesort')
return pd.DataFrame(v[a, i], index=x.index, columns=cols)
df[cols] = df.groupby(['Name','Class'])[cols].apply(f)
#filter out all rows with '' only
df = df[(df[cols] != '').all(axis=1)]
print (df)
Name Class Marks1 Marks2
0 AA CC 10 33
1 AA CC 21 24
#solution if missing values are NaNs
print (df)
Name Class Marks1 Marks2
0 AA CC 10 NaN
1 AA CC NaN 33
2 AA CC 21 NaN
3 AA CC NaN 24
cols = ['Marks1','Marks2']
def f(x):
v = x.values
i = np.arange(v.shape[1])
a = pd.isnull(v).argsort(0, kind='mergesort')
arr = v[a, i]
return pd.DataFrame(arr, index=x.index, columns=cols)
df[cols] = df.groupby(['Name','Class'])[cols].apply(f)
#remove all NaNs rows by column cols
df = df.dropna(subset=cols, how='all')
print (df)
Name Class Marks1 Marks2
0 AA CC 10 33
1 AA CC 21 24
你能做到的
您可以
groupby
为前两列中的每个值组合应用custom function:相关问题 更多 >
编程相关推荐