क्या उन आईडी को खोजने का कोई तरीका है जिनमें ऐप्पल और स्ट्रॉबेरी दोनों हैं, और फिर कुल लंबाई पाएं? और आईडी जिनमें केवल ऐप्पल है, और आईडीएस जिसमें केवल स्ट्रॉबेरी है?

डीएफ:

        ID           Fruit
0       ABC          Apple        <-ABC has Apple and Strawberry
1       ABC          Strawberry   <-ABC has Apple and Strawberry
2       EFG          Apple        <-EFG has Apple only
3       XYZ          Apple        <-XYZ has Apple and Strawberry
4       XYZ          Strawberry   <-XYZ has Apple and Strawberry 
5       CDF          Strawberry   <-CDF has Strawberry
6       AAA          Apple        <-AAA has Apple only

वांछित आउटपुट:

Length of IDs that has Apple and Strawberry: 2
Length of IDs that has Apple only: 2
Length of IDs that has Strawberry: 1

धन्यवाद!

2
Mick 23 अक्टूबर 2020, 09:42

2 जवाब

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

यदि हमेशा सभी मान केवल Apple या Strawberry कॉलम Fruit में हैं, तो आप प्रति समूह सेट की तुलना कर सकते हैं और फिर ID को True के sum से गिन सकते हैं। एस मान:

v = ['Apple','Strawberry']
out = df.groupby('ID')['Fruit'].apply(lambda x: set(x) == set(v)).sum()
print (out)
2

संपादित करें: यदि कई मान हैं:

s = df.groupby('ID')['Fruit'].agg(frozenset).value_counts()
print (s)
{Apple}                2
{Strawberry, Apple}    2
{Strawberry}           1
Name: Fruit, dtype: int64
3
jezrael 25 जिंदा 2021, 09:20

आप डेटाफ़्रेम के लिए pivot_table और value_counts का उपयोग कर सकते हैं (पंडों 1.1.0.):

df.pivot_table(index='ID', columns='Fruit', aggfunc='size', fill_value=0)\
.value_counts()

आउटपुट:

Apple  Strawberry
1      1             2
       0             2
0      1             1

वैकल्पिक रूप से आप इसका उपयोग कर सकते हैं:

df.groupby(['ID', 'Fruit']).size().unstack('Fruit', fill_value=0)\
.value_counts()
2
Mykola Zotko 23 अक्टूबर 2020, 10:53