डेटाफ़्रेम की कल्पना करें, जैसे:

COL1             COL2                   COL3
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
bar              unique string          unique int             
bar              unique string          unique int
bar              unique string          unique int
bar              unique string          unique int
qux              unique string          unique int
qux              unique string          unique int
biz              unique string          unique int

मैं एक नियम सेट करना चाहता हूं जहां मैं COL1 में आइटम दोहराने के लिए अधिकतम 3 (यादृच्छिक/प्रथम) पंक्तियां रखता हूं। मैं वास्तव में परवाह नहीं करता कि मैं कौन सी पंक्ति छोड़ता हूं, इसलिए यह यादृच्छिक हो सकता है, इसलिए यह एक सचेत विकल्प है।

मुझे यकीन नहीं है कि मेरे df पर लूप किए बिना, इसे सुरुचिपूर्ण ढंग से कैसे हल किया जाए। मैंने ग्रुपबाय, सॉर्ट और ड्रॉप.डुप्लिकेट में देखा है, लेकिन मुझे यकीन नहीं है कि यह जाने का तरीका है।

मेरा सबसे अच्छा अनुमान एटीएम, COL1 द्वारा क्रमबद्ध करना है, COL4 जोड़ें जहां मैं COL1 (समूह) द्वारा आइटम गिनता हूं, और फिर उन सभी पंक्तियों को छोड़ देता हूं जहां COL4 3 से अधिक है। लेकिन मुझे यकीन नहीं है कि चौथे कॉलम में आइटम कैसे गिनें ... क्या यह जाने का रास्ता है? कोई सुझाव?

अपेक्षित उत्पादन:

COL1             COL2                   COL3
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
bar              unique string          unique int             
bar              unique string          unique int
bar              unique string          unique int
qux              unique string          unique int
qux              unique string          unique int
biz              unique string          unique int
1
LucaVJ 24 पद 2020, 07:38

1 उत्तर

सबसे बढ़िया उत्तर

आप GroupBy.head समूह से पहला तीन मान लेने के लिए या GroupBy.tail अंतिम तीन लेने के लिए।

df.groupby('COL1').head(3)

   COL1           COL2        COL3
0   foo  unique string  unique int
1   foo  unique string  unique int
2   foo  unique string  unique int
5   bar  unique string  unique int
6   bar  unique string  unique int
7   bar  unique string  unique int
9   qux  unique string  unique int
10  qux  unique string  unique int
11  biz  unique string  unique int
1
Ch3steR 24 पद 2020, 07:45
गोली मार। यह गंभीर रूप से बेवकूफ आसान है। ध्न्यवाद! :डी। कुछ ही मिनटों में इस उत्तर को स्वीकार करना। साथ ही, यहां एक संबंधित थ्रेड/समाधान है: stackoverflow.com/questions/37997668/…
 – 
LucaVJ
24 पद 2020, 07:49