如何组合两列以上?

时间:2016-04-20 16:31:46

标签: python python-3.x csv pandas

我在csv文件中有一个学生列表。我希望(使用Python)显示四列,我想展示在数学,计算机和物理学方面有较高分数的男学生。

我尝试使用pandas库。

marks = pd.concat([data['name'], 
                 data.loc[data['students']==1, 'maths'].nlargest(n=10)], 'computer'].nlargest(n=10)], 'physics'].nlargest(n=10)])

我使用1代表男生,0代表女生。 它给我一个错误说:语法无效。

1 个答案:

答案 0 :(得分:1)

这是一种向每个学科展示前10名学生的方法。你当然可以将这三个分数相加并选择总分最高的学生,如果你想要合并而不是个人表现(见下图)。

df1 = pd.DataFrame(data={'name': [''.join(random.choice('abcdefgh') for _ in range(8)) for i in range(100)],
                         'students': np.random.randint(0, 2, size=100)})
df2 = pd.DataFrame(data=np.random.randint(0, 10, size=(100, 3)), columns=['math', 'physics', 'computers'])
data = pd.concat([df1, df2], axis=1)

data.info()

RangeIndex: 100 entries, 0 to 99
Data columns (total 5 columns):
name         100 non-null object
students     100 non-null int64
math         100 non-null int64
physics      100 non-null int64
computers    100 non-null int64
dtypes: int64(4), object(1)
memory usage: 4.0+ KB

res = pd.concat([data.loc[:, ['name']], data.loc[data['students'] == 1, 'math'].nlargest(n=10), data.loc[data['students'] == 1, 'physics'].nlargest(n=10), data.loc[data['students'] == 1, 'computers'].nlargest(n=10)], axis=1)

res.dropna(how='all', subset=['math', 'physics', 'computers'])

        name  math  physics  computers
0   geghhbce   NaN      9.0        NaN
1   hbbdhcef   NaN      7.0        NaN
4   ghgffgga   NaN      NaN        8.0
6   hfcaccgg   8.0      NaN        NaN
14  feechdec   NaN      NaN        8.0
15  dfaabcgh   9.0      NaN        NaN
16  ghbchgdg   9.0      NaN        NaN
23  fbeggcha   NaN      NaN        9.0
27  agechbcf   8.0      NaN        NaN
28  bcddedeg   NaN      NaN        9.0
30  hcdgbgdg   NaN      8.0        NaN
38  fgdfeefd   NaN      NaN        9.0
39  fbcgbeda   9.0      NaN        NaN
41  agbdaegg   8.0      NaN        9.0
49  adgbefgg   NaN      8.0        NaN
50  dehdhhhh   NaN      NaN        9.0
55  ccbaaagc   NaN      8.0        NaN
68  hhggfffe   8.0      9.0        NaN
71  bhggbheg   NaN      9.0        NaN
84  aabcefhf   NaN      NaN        9.0
85  feeeefbd   9.0      NaN        NaN
86  hgeecacc   NaN      8.0        NaN
88  ggedgfeg   9.0      8.0        NaN
89  faafgbfe   9.0      NaN        9.0
94  degegegd   NaN      8.0        NaN
99  beadccdb   NaN      NaN        9.0


data['total'] = data.loc[:, ['math', 'physics', 'computers']].sum(axis=1)
data[data.students==1].nlargest(10, 'total').sort_values('total', ascending=False)

        name  students  math  physics  computers  total
29  fahddafg         1     8        8          8     24
79  acchhcdb         1     8        9          7     24
9   ecacceff         1     7        9          7     23
16  dccefaeb         1     9        9          4     22
92  dhaechfb         1     4        9          9     22
47  eefbfeef         1     8        8          5     21
60  bbfaaada         1     4        7          9     20
82  fbbbehbf         1     9        3          8     20
18  dhhfgcbb         1     8        8          3     19
1   ehfdhegg         1     5        7          6     18