प्रत्येक चर के लिए अस्थिर और वापसी मूल्य मायने रखता है?


19

मेरे पास एक डेटा फ्रेम है जो 19717 लोगों की बहुविकल्पीय प्रश्नों के माध्यम से प्रोग्रामिंग भाषाओं की पसंद को रिकॉर्ड करता है। पहला कॉलम निश्चित रूप से प्रतिवादी के लिंग का है जबकि बाकी विकल्प वे चुने गए हैं। और इसलिए यदि मैं पायथन को चुनता हूं तो मेरी प्रतिक्रिया पायथन कॉलम में दर्ज की जाएगी और बैश और इसके विपरीत नहीं।

ID     Gender              Python    Bash    R    JavaScript    C++
0      Male                Python    nan     nan  JavaScript    nan
1      Female              nan       nan     R    JavaScript    C++
2      Prefer not to say   Python    Bash    nan  nan           nan
3      Male                nan       nan     nan  nan           nan

मैं जो चाहता हूं वह एक तालिका है जो Genderरिकॉर्ड के तहत प्रत्येक श्रेणी के उदाहरणों की संख्या लौटाती है । इसलिए यदि 5000 पुरुषों को पायथन में और 3000 महिलाओं को जेएस में कोडित किया गया है, तो मुझे यह प्राप्त करना चाहिए:

Gender              Python    Bash    R    JavaScript    C++
Male                5000      1000    800  1500          1000
Female              4000      500     1500 3000          800
Prefer Not To Say   2000      ...   ...    ...           860

मैंने कुछ विकल्पों की कोशिश की है:

df.iloc[:, [*range(0, 13)]].stack().value_counts()

Male                       16138
Python                     12841
SQL                         6532
R                           4588
Female                      3212
Java                        2267
C++                         2256
Javascript                  2174
Bash                        2037
C                           1672
MATLAB                      1516
Other                       1148
TypeScript                   389
Prefer not to say            318
None                          83
Prefer to self-describe       49
dtype: int64

और जैसा ऊपर वर्णित है वैसा आवश्यक नहीं है। क्या यह पंडों में किया जा सकता है?

जवाबों:


7

एक और विचार अक्ष 1 के साथ मूल्यों के लिए होगा , फिर :apply joinget_dummiesgroupby

(df.loc[:, 'Python':]
 .apply(lambda x: '|'.join(x.dropna()), axis=1)
 .str.get_dummies('|')
 .groupby(df['Gender']).sum())

[बाहर]

                   Bash  C++  JavaScript  Python  R
Gender                                             
Female                0    1           1       0  1
Male                  0    0           1       1  0
Prefer not to say     1    0           0       1  0

7

आप Genderसूचकांक और योग के रूप में सेट कर सकते हैं :

s = df.set_index('Gender').iloc[:, 1:]
s.eq(s.columns).astype(int).sum(level=0)

आउटपुट:

                   Python  Bash  R  JavaScript  C++
Gender                                             
Male                    1     0  0           1    0
Female                  0     0  1           1    1
Prefer not to say       1     1  0           0    0

किसी कारण से यह प्रत्येक Genderसूचकांक के लिए सभी 0s लौटा रहा है ।
शिव_90

4

मान लें nanकि NaNयह (यानी यह स्ट्रिंग नहीं है), हम इसका लाभ उठा सकते हैं countक्योंकि यह NaNवांछित आउटपुट प्राप्त करने के लिए उपेक्षा करता है

df_out = df.iloc[:,2:].groupby(df.Gender, sort=False).count()

Out[175]:
                   Python  Bash  R  JavaScript  C++
Gender
Male                    1     0  0           1    0
Female                  0     0  1           1    1
Prefer not to say       1     1  0           0    0

3

आप कर सकते हैं meltऔर उपयोग करेंcrosstab

df1 = pd.melt(df,id_vars=['ID','Gender'],var_name='Language',value_name='Choice')
df1['Choice'] = np.where(df1['Choice'] == df1['Language'],1,0)
final= pd.crosstab(df1['Gender'],df1['Language'],values=df1['Choice'],aggfunc='sum')

print(final)
Language              Bash  C++  JavaScript  Python  R
Gender                                              
Female                  0    1           1       0  1
Male                    0    0           1       1  0
Prefer not to say       1    0           0       1  0

2

हमें एक लाइन पर धकेलें

df.drop('ID',1).melt('Gender').\
    query('variable==value').\
      groupby(['Gender','variable']).size().unstack(fill_value=0)
Out[120]: 
variable        Bash  C++  JavaScript  Python  R
Gender                                          
Female             0    1           1       0  1
Male               0    0           1       1  0
Prefernottosay     1    0           0       1  0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.