Name Class Marks1 Marks2
AA CC 10
AA CC 33
AA CC 21
AA CC 24
我想将上述格式的数据转换为
Name Class Marks1 Marks2
AA CC 10 33
AA CC 21 24
我应该如何取得结果? PS-这只是数据的一个示例,数据太大,并且具有更多的列,并且可以具有许多这样的行。如何在不影响数据质量的情况下删除重复的行。
答案 0 :(得分:0)
你可以做
In [421]: df.groupby(df.index // 2).first()
Out[421]:
Name Class Marks1 Marks2
0 AA CC 10.0 33.0
1 AA CC 21.0 24.0
答案 1 :(得分:0)
您可以groupby
为前两列中的每个值组合并应用custom function:
#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