dataframe लिएप्राप्त समूह आईडी वापस पांडा dataframe में
In [2]: df = pd.DataFrame({'Name': ['foo', 'bar'] * 3,
...: 'Rank': np.random.randint(0,3,6),
...: 'Val': np.random.rand(6)})
...: df
Out[2]:
Name Rank Val
0 foo 0 0.299397
1 bar 0 0.909228
2 foo 0 0.517700
3 bar 0 0.929863
4 foo 1 0.209324
5 bar 2 0.381515
मैं नाम और रैंक के आधार पर समूह में रुचि रखते हैं और संभवतः समस्त मानों
In [3]: group = df.groupby(['Name', 'Rank'])
In [4]: agg = group.agg(sum)
In [5]: agg
Out[5]:
Val
Name Rank
bar 0 1.839091
2 0.381515
foo 0 0.817097
1 0.209324
लेकिन मैं में एक क्षेत्र प्राप्त करना चाहते हैं हो रही है मूल df
कि उस पंक्ति के लिए समूह संख्या में शामिल हैं, की तरह
In [13]: df['Group_id'] = [2, 0, 2, 0, 3, 1]
In [14]: df
Out[14]:
Name Rank Val Group_id
0 foo 0 0.299397 2
1 bar 0 0.909228 0
2 foo 0 0.517700 2
3 bar 0 0.929863 0
4 foo 1 0.209324 3
5 bar 2 0.381515 1
वहाँ है पांडा में ऐसा करने का एक अच्छा तरीका है?
मैं, अजगर के साथ इसे प्राप्त कर सकते हैं
In [16]: from itertools import count
In [17]: c = count()
In [22]: group.transform(lambda x: c.next())
Out[22]:
Val
0 2
1 0
2 2
3 0
4 3
5 1
लेकिन यह काफी एक बड़ी dataframe पर धीमी गति से है, तो मैं एक बेहतर बनाया पांडा में जिस तरह से यह करने के लिए हो सकता है सोचा।
एक और उर्फ 'प्रतीत हो रहा है grouped.grouper.labels [0]' – beardc
समस्या सिर्फ समूहक दर्ज नहीं किया जाता है, कोई गारंटी नहीं है इसे तोड़ने नहीं होंगे। – dashesy
तीन साल बाद और यह बात अभी भी अनियंत्रित है। लेकिन यह पता लगाना आसान है कि 'df.grouper' वर्ग' बेसग्राउपर 'है। 'Group_info' विधि कोड में परिभाषित किया गया है [यहां] (https://github.com/pydata/pandas/blob/2e4da9b07d500add644257b9fa317a668cf5e332/pandas/core/groupby.py#L1549), और आप निशान वापस एक छोटे से पालन कर सकते हैं निम्नलिखित की पुष्टि करने के लिए आगे: 1) 'group_info [1]' अद्वितीय समूह पहचानकर्ताओं की एक सरणी है, 2) पंक्ति 'i' के लिए समूह पहचानकर्ता 'group_info [0] [i]', और 3) 'group_info [3 ] 'समूहों की संख्या – shadowtalker