मेरे पास इस तरह एक डेटाफ्रेम है:

name  | weekday | count 
Peter | Friday  | {16, 17, 9, 10, 15}
Peter | Friday  | {10, 11, 14}  
Peter | Friday  | {16, 17, 11, 12, 15}  
Bob   | Friday  | {10}
Bob   | Friday  | {9, 10, 11, 12, 13}
Bob   | Friday  | {9, 10, 11, 14, 15}

मैं नाम और कार्यदिवस के आधार पर समूह बनाना चाहता हूं, इस तरह count के चौराहे का एक नया कॉलम जोड़ें:

name  | weekday | intersection 
Peter | Friday  | 
Bob   | Friday  | 10

जहां कोई चौराहे की स्थिति के लिए खाली स्ट्रिंग वापस नहीं की जानी चाहिए, यहां वह कोड है जिसका मैं उपयोग कर रहा हूं:

df.groupby(['name','weekday']).apply(lambda x: pd.Series({'intersection': ", ".join("{0}".format(n) for n in sorted(list(set.intersection(*x['count']))))})).reset_index()

लेकिन मुझे इस तरह का परिणाम मिल रहा है:

name  | weekday | intersection 
Peter | Friday  | Nan
Bob   | Friday  | 10

मैंने खाली सूची पर ''.join() की कोशिश की है और यह काम करता है और खाली स्ट्रिंग लौटाता है, लेकिन यह समूह का उपयोग करने के बाद काम नहीं करेगा, मुझे नहीं पता कि यह ऐसा क्यों कर रहा है और इसे कैसे हल किया जाए

0
efsee 14 जिंदा 2020, 02:57
मेरा डेटाफ्रेम वास्तव में उदाहरण से बड़ा है, और कुछ अन्य पंक्तियों के लिए चौराहे खाली होने पर यह नेन के बजाय खाली स्ट्रिंग वापस कर देगा, कोई विचार है कि यह ऐसा क्यों कर रहा है?
 – 
efsee
14 जिंदा 2020, 03:04
आप बाद में केवल fillna के साथ '' कर सकते हैं।
 – 
Quang Hoang
14 जिंदा 2020, 03:22

1 उत्तर

reduce, "stringify" और ज्वाइन करके चौराहे का पता लगाएं:

from functools import reduce

def get_intersection(s: pd.Series) -> str:
    intersect = reduce(lambda a, b: a.intersection(b), s.iloc[1:], s.iat[0])
    return ', '.join([str(x) for x in intersect])

intersection = (df.groupby(['name', 'weekday'])['count']
                  .agg(get_intersection)
                  .rename('intersection')
                  .reset_index()
                 )

जो आपको देता है:

print(intersection)

    name    weekday intersection
0   Bob     Friday  10
1   Peter   Friday  

यदि आप थोड़े ओवरलैप वाले बड़े डेटासेट के साथ काम कर रहे हैं, तो अनावश्यक प्रसंस्करण/कार्य से बचने के लिए while len(intersect) > 0 लूप शायद reduce से बेहतर होगा

0
Vivian L. 14 जिंदा 2020, 05:20