2017-11-16 2 views
-2

Ich habe zwei Panda-Datenframe, die ich beitreten merge. Ich bekomme viel zusätzliche ReihePandas verschmelzen geben mehr Zeilen

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 

habe ich im Grunde Top-5-Elemente, die durch den Einsatz in jeder Abteilung genommen, aber wenn ich diese zu meinem Haupt-Datenrahmen verschmelzen. Ich schließe mich innerlich dem level_1 an, welches der alte Index im neuen Datenrahmen über "right index" ist.

erwartete Zeilenanzahl: 92, nach Zusammenführung zählt tatsächliche Reihe: 737.

Vielen Dank für jede Hilfe!

+0

Es scheint einige Duplikate ... – jezrael

+0

Können Sie einige Datenprobe hinzufügen? – jezrael

+0

Es tut mir leid, dass ich keine Daten posten kann. Aber sieht der Code richtig aus? Ich konnte neue Indizes im endgültigen Datenrahmen sehen, aber jetzt sicher, wie sie kommen würden! – Vivek

Antwort

1

Ich denke, Ihr Code sollte mit apply und nsmallest vereinfachen werden:

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 
Verwandte Themen