pandas合并提供更多行

时间:2017-11-16 13:06:17

标签: python pandas merge

我有两个熊猫数据框,我需要加入合并。

nd = cu.groupby('division')['usage'].nsmallest(5).rename('t_usage').reset_index()
nd = nd.merge(cu, left_on='level_1', right_index = True)
nd.shape

我基本上已经在每个部门中使用了前5个元素但是当我将其合并到我的主数据帧时,我得到了很多额外的行。我是内部加入level_1,这是新数据框中“旧索引”的旧索引。

预期行数:92,合并后的实际行数:737。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为您的代码应该通过applynsmallest进行简化:

np.random.seed(1997)

cu = pd.DataFrame({'division':np.random.choice(list('abcdef'), size=30),
                   'usage':np.random.randint(100, size=30),
                   'cols':np.random.randint(10, size=30)})

print (cu)
    cols division  usage
0      5        f      0
1      0        b     22
2      2        a     73
3      6        a     38
4      5        c     82
5      9        b     39
6      5        a      9
7      2        a     81
8      9        b     27
9      5        b     27
10     7        e     90
11     1        d     13
12     1        f     33
13     4        b     21
14     9        a     27
15     6        f     89
16     5        a     20
17     3        c     98
18     6        b     74
19     9        a     82
20     3        f     52
21     8        c     79
22     6        f     17
23     0        d     91
24     9        d     73
25     8        e     33
26     9        d      1
27     1        f     52
28     7        d     40
29     3        f     16
nd = cu.groupby('division', group_keys=False).apply(lambda x: x.nsmallest(5, 'usage'))
print (nd)

    cols division  usage
6      5        a      9
16     5        a     20
14     9        a     27
3      6        a     38
2      2        a     73
13     4        b     21
1      0        b     22
8      9        b     27
9      5        b     27
5      9        b     39
21     8        c     79
4      5        c     82
17     3        c     98
26     9        d      1
11     1        d     13
28     7        d     40
24     9        d     73
23     0        d     91
25     8        e     33
10     7        e     90
0      5        f      0
29     3        f     16
22     6        f     17
12     1        f     33
20     3        f     52