मेरे पास एक नाम प्राप्त करने के बारे में एक pandas प्रश्न है यदि किसी X स्तंभ से मानों की श्रेणी सत्य है। यदि वर्ष 1960 से अब तक अपने दशक के भीतर है, तो नाम प्रिंट करें तो यहां मेरे डेटाफ़्रेम का एक उदाहरण दिया गया है:

#,Name,description,year
1,a,foo,1961
2,a,foo2,1977
3,a,foo3,1980
4,a,foo4,1995
5,a,foo5,2001
6,a,foo6,2011
7,a,foo7,2020
8,b,bar,1965
9,b,bar2,1970
10,b,bar3,1983
11,b,bar4,1997
12,b,bar5,2005
13,b,bar6,2016
14,b,bar7,2022
15,c,abc,1965
16,c,ab2,1970
17,c,abc3,1993
18,c,abc4,2007
19,c,abc5,2015
20,c,abc6,2020

आउटपुट: a,b

अब तक, मैंने यह किया है:

dataset[Year].str.match(str(year[0:3]))

मुझे लगता है कि इसके लिए मुझे एक for लूप चाहिए, लेकिन मुझे बिल्कुल भी यकीन नहीं है। हर प्रकार की सहायता के लिए आपका धन्यवाद!

1
hydrosphera 6 जिंदा 2022, 20:59

2 जवाब

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

समस्या को हल करने का एक तरीका है Pandas groupby पद्धति का उपयोग करके समूह बनाना और फिर Pandas फ़िल्टर विधि का उपयोग करके समूहों को फ़िल्टर करना।

import pandas as pd


def is_within_range(group):
    years = sorted(list(group["Year"]))
    check_decade = {}
    for year in years:
        decade = year // 10
        if 196 <= decade <= 202:
            check_decade[decade] = True
    if len(check_decade.keys()) == (202 - 196 + 1):
        return True
    return False


data = pd.read_csv("years.csv")
filtered_data = data.groupby(['Name']).filter(lambda x: is_within_range(x))
print(list(filtered_data.Name.unique()))

आउटपुट:

['a', 'b']

years.csv:

#,Name,Description,Year
1,a,foo,1961
2,a,foo2,1977
3,a,foo3,1980
4,a,foo4,1995
5,a,foo5,2001
6,a,foo6,2011
7,a,foo7,2020
8,b,bar,1965
9,b,bar2,1970
10,b,bar3,1983
11,b,bar4,1997
12,b,bar5,2005
13,b,bar6,2016
14,b,bar7,2022
15,c,abc,1965
16,c,ab2,1970
17,c,abc3,1993
18,c,abc4,2007
19,c,abc5,2015
20,c,abc6,2020

स्पष्टीकरण:

  • is_with_range विधि यह जांचती है कि 1960 से 2020 तक किसी समूह के प्रत्येक दशक में वर्ष हैं या नहीं। एक वर्ष का दशक year // 10 है। उदा. वर्ष 1965 और वर्ष 1969 का दशक मान 196 है जबकि 1996, 1998 का ​​दशक मान 199 है।
  • मैंने प्रत्येक दशक को True पर ध्वजांकित करने के लिए एक शब्दकोश का उपयोग किया और बाद में समूह में दशकों की संख्या की गणना की।

संदर्भ:

1
arsho 6 जिंदा 2022, 23:04

आप ऐसा करने के लिए dataframe.query विधि का उपयोग कर सकते हैं जैसे डेटासेट.क्वेरी("वर्ष">=1961, inplace=True) प्रिंट (डेटासेट) #it डेटाफ़्रेम को उन मानों से बदलें जिनका वर्ष 1961 से अधिक है

1
Shreyanshu 6 जिंदा 2022, 21:41
मैं आपकी बात देखता हूं, लेकिन अगर कोई नाम है कि उदाहरण के लिए एक दशक है जिसमें एक वर्ष नहीं है? जैसे (1962,1970,1990,2000,2010,2020)। यह 1980 गायब है और उदाहरण वर्ष 1961 से अधिक हैं। शायद शर्त यह होनी चाहिए: 1960<=वर्ष<=1969 && 1970<=वर्ष<=1979...?
 – 
hydrosphera
6 जिंदा 2022, 21:54