- क्या ऐसा करने का एक तेज़, अधिक पाइथोनिक तरीका है?
- क्या है यह चेतावनी
UserWarning: Boolean Series key will be reindexed to match DataFrame index. "DataFrame index.", UserWarning
और क्या मुझे इससे चिंतित होना चाहिए?
मेरे पास 3 कॉलम के साथ एक सीएसवी फ़ाइल है: संगठन, महीने, व्यक्ति।मुझे डेटा की एक तालिका को कैसे ढूढ़ना और एक्सेस करना चाहिए ताकि मैं पाइथन 3.5 में आसानी से सबसेट की तुलना कर सकूं?
| org | month | person |
| --- | ---------- | ------ |
| 1 | 2014-01-01 | 100 |
| 1 | 2014-01-01 | 200 |
| 1 | 2014-01-02 | 200 |
| 2 | 2014-01-01 | 300 |
कौन सा मैं के साथ एक pandas.core.frame.DataFrame
में पढ़ा है: अंतिम लक्ष्य
data = pd.read_csv('data_base.csv', names=['month', 'org', 'person'], skiprows=1)
पहले की अवधि में व्यक्तियों की सेट के साथ 2 में लगातार अंतराल के बीच व्यक्तियों के चौराहे तुलना करने के लिए है।
org: 1, month: 2014-01-01, count(intersection((100, 200), 200))/len(set(100, 200)) == 0.5
संपादित करें: मैं इसके साथ काम करने के लिए मिल गया:
import pandas as pd
import sys
data = pd.read_csv('data_base.csv', names=['month', 'org', 'person'], skiprows=1)
data.sort_values(by=['org', 'month', 'person'])
results = {}
for _org in set(data.org):
results[_org] = {}
months = sorted(list(set(data[data.org == _org].month)))
for _m1, _m2 in zip(months, months[1:]):
_s1 = set(data[data.org == _org][data.month == _m1].person)
_s2 = set(data[data.org == _org][data.month == _m2].person)
results[_org][_m1] = float(len(_s1 & _s2)/len(_s1))
print(str(_org) + '\t' + str(_m1) + '\t' + str(_m2) + '\t' + str(round(results[_org][_m1], 2)))
sys.stdout.flush()
कौन इस तरह उत्पादन का उत्पादन:
UserWarning: Boolean Series key will be reindexed to match DataFrame index. "DataFrame index.", UserWarning
5640 2014-01-01 2014-02-01 0.75
5640 2014-02-01 2014-03-01 0.36
5640 2014-03-01 2014-04-01 0.6
...
लेकिन यह वास्तव में धीमी गति से और तरह बदसूरत की है ... पर वर्तमान दर मेरी पिछली-लिफाफा-गणना डेटा के 2-वर्षीय बैच के लिए लगभग 22 घंटे अनुमानित करती है।
पांडस पूर्ण संचालन के लिए बहुत अच्छा है, न कि स्लाइसिंग के लिए।एक तत्व का उपयोग करने का समय 10-100 माइक्रोसॉन्ड के आदेश पर है, जो एक पूर्ण 1000x है जो आपको शब्दकोश लुकअप (50 एनएस के तहत) के लिए प्राप्त होगा। ट्रेडऑफ पूर्ण डेटाफ्रेम या कॉलम-वार गणनाओं के लिए बड़े डेटा के साथ पांडस महान है: लंबे समय तक प्रारंभिक समय बेहद तेज़, वेक्टरकृत गणनाओं के साथ अच्छी तरह से व्यापार किया जाता है। यहां, आप प्रभावी रूप से तत्व-दर-तत्व गणना कर रहे हैं और पांडस प्रकारों से कनवर्ट कर रहे हैं, जिसका अर्थ है पांडस, हालांकि उत्कृष्ट, इस कार्य के लिए सही लाइब्रेरी नहीं है। –