2013-01-09 17 views
9
Dataframe: 
    one two 
a 1 x 
b 1 y 
c 2 y 
d 2 z 
e 3 z 

grp = DataFrame.groupby('one') 
grp.agg(lambda x: ???) #or equivalent function 

वांछित उत्पादन Agg:अजगर पांडा कस्टम grp.agg से समारोह

one two 
1 x|y 
2 y|z 
3 z 

मेरे एकीकृत dataframes से पहले agg समारोह "|".join(sorted(set(x))) था। आदर्श रूप से मैं समूह में किसी भी कॉलम रखना चाहता हूं और एजीजी ऊपर दिए गए प्रत्येक कॉलम आइटम के लिए "|".join(sorted(set()) देता है। मैंने np.char.join() भी कोशिश की।

लव पांडा और मुझे 800 लाइन जटिल प्रोग्राम से पार्क में 400 लाइन की पैदल दूरी पर ले जाया गया है जो ज़ूम करता है। धन्यवाद :)

उत्तर

10

आप लोग बहुत करीब थे:

In [1]: df.groupby('one').agg(lambda x: "|".join(x.tolist())) 
Out[1]: 
    two 
one 
1 x|y 
2 y|z 
3  z 

विस्तारित जवाब छँटाई संभालने के लिए और केवल सेट लेने के लिए:

In [1]: df = DataFrame({'one':[1,1,2,2,3], 'two':list('xyyzz'), 'three':list('eecba')}, index=list('abcde'), columns=['one','two','three']) 

In [2]: df 
Out[2]: 
    one two three 
a 1 x  e 
b 1 y  e 
c 2 y  c 
d 2 z  b 
e 3 z  a 

In [3]: df.groupby('one').agg(lambda x: "|".join(x.order().unique().tolist())) 
Out[3]: 
    two three 
one 
1 x|y  e 
2 y|z b|c 
3  z  a 
+0

बहुत बढ़िया। मैं भयानक 'grp2.agg (lambda x: u "|" .join (सॉर्ट किया गया (सेट (नक्शा (str, x.tolist()))))। असली के लिए सरणी का उपयोग करने पर मुझे रस्सी दिखाने के लिए धन्यवाद! एक अच्छा संदर्भ कहां है? एक बार फिर धन्यवाद। –

+0

ईमानदारी से, Ipython और कोड स्निपेट के साथ प्रयोग करने से किसी भी एक संसाधन की तुलना में मेरी समझ के लिए और अधिक किया गया है। लेकिन डेटा विश्लेषण के लिए वेस मैककिनी का पायथन एक महान संदर्भ है। – Zelazny7

+0

मैं दिसंबर से पुस्तक पढ़ रहा हूं लेकिन अभी भी अभ्यास करने के लिए बहुत कुछ है। एफवाईआई मैंने आपके कुछ एचडीएफ 5 स्टोर सवालों पर एक नज़र डाली, मैं इसके साथ लचीलापन की समस्याओं में भाग गया। मैं 60 कॉलम के साथ 3 मिलियन पंक्ति डेटा सेट के साथ काम करता हूं, बहुत सारे टेक्स्ट और मोंगोडीबी एक चैंपियन रहा है। –

1

वहाँ पांडा documentation में, तार जोड़ लिए एक बेहतर तरीका है ।
तो मैं इस तरह से पसंद करता हूं:

In [1]: df.groupby('one').agg(lambda x: x.str.cat(sep='|')) 
Out[1]: 
    two 
one 
1 x|y 
2 y|z 
3  z 
संबंधित मुद्दे