2017-01-08 15 views
5

का उपयोग कर मैं एक DataFrame जो की तरह लग रही है DataFrame नमूने के लिए:,पांडा का उपयोग करते हुए एक विशिष्ट स्तंभ का वजन

index name city 
    0  Yam Hadera 
    1  Meow Hadera 
    2  Don Hadera 
    3  Jazz Hadera 
    4  Bond Tel Aviv 
    5  James Tel Aviv 

मैं पांडा बेतरतीब ढंग से मूल्यों का चयन करना चाहते city कॉलम में उपस्थिति (का उपयोग कर की तरह की संख्या का उपयोग कर: df.city.value_counts()), तो मेरे जादू समारोह के परिणामों, मान लीजिए:

df.magic_sample(3, weight_column='city') 

लग सकता है जैसे:

0  Yam  Hadera 
    1  Meow  Hadera 
    2  Bond  Tel Aviv 

धन्यवाद! :)

उत्तर

7

आप कर सकते हैं city द्वारा समूह और फिर प्रत्येक समूह उनकी लंबाई के आधार पर मूल डेटा फ्रेम की लंबाई की तुलना में नमूना:

df.groupby('city', group_keys=False).apply(lambda g: g.sample(3 * len(g)/len(df))) 

enter image description here

+0

धन्यवाद! आखिरकार, बड़े डेटा सेट के लिए, यह कुल मिलाकर 'N' मानों से कम (आपके उदाहरण में, एन = 3) का चयन करता है। क्या ऐसा करने का कोई तरीका है ताकि मुझे कुल मिलाकर एन मान मिले? – Infinity

+0

@ इन्फिनिटी क्या होगा यदि आपके पास 10 पंक्तियों के साथ 10 समूह और एन = 3 थे? –

+0

@TedPetrou टिप्पणी के रूप में, यह नमूना पद्धति हमेशा काम नहीं कर सकती है क्योंकि आप केवल समूह से पंक्तियों की पूर्णांक संख्या का नमूना दे सकते हैं, लेकिन * वजन * पंक्तियों की कुल संख्या * आंशिक हो सकती है। – Psidom

0

अगर मैं सवाल सही ढंग से समझ, हो सकता है आप random.sample:

>>> import pandas as pd 
>>> from random import sample 
>>> df = pd.DataFrame(data=[('Yam', 'Hadera'), ('Meow', 'Hadera'), ('Don', 'Hadera'), ('Jazz', 'Hadera'), ('Bond', 'Tel Aviv'), ('James', 'Tel Aviv')], columns=('name', 'city')) 
>>> df 
    name  city 
0 Yam Hadera 
1 Meow Hadera 
2 Don Hadera 
3 Jazz Hadera 
4 Bond Tel Aviv 
5 James Tel Aviv 
>>> df.iloc[sample(range(len(df)), 3), :] 
    name  city 
4 Bond Tel Aviv 
0 Yam Hadera 
1 Meow Hadera 
संबंधित मुद्दे