मेरे पास डेटाफ्रेम है

graph   0       1       2       3       4
1       blue    blue    blue    blue    blue
2       blue    blue    blue    blue    blue
3       blue    red     blue    blue    red
4       red     blue    red     red     blue
5       red     red     blue    red     red
6       blue    blue    blue    blue    blue

मुझे प्रत्येक स्ट्रिंग/लाइन के मान 'नीला' की गिनती प्राप्त करने की आवश्यकता है।
वांछित आउटपुट:

graph   result
1       5
2       5
3       3
4       2
5       1
6       5

मैं इसके साथ करने की कोशिश करता हूं

(df['0', '1', '2', '3', '4']).applymap(lambda x: str.count(x, 'blue'))

लेकिन यह लौट आता है

KeyError: ('0', '1', '2', '3', '4')
4
Petr Petrov 2 अप्रैल 2017, 21:40

3 जवाब

सबसे बढ़िया उत्तर
In [35]: df.set_index('graph').eq('blue').sum(1).reset_index(name='result')
Out[35]:
   graph  result
0      1       5
1      2       5
2      3       3
3      4       2
4      5       1
5      6       5
3
MaxU 2 अप्रैल 2017, 21:42

numpy मुड़े हुए। यदि आप विश्वसनीय रूप से जानते हैं कि graph कॉलम कहां है, अर्थात् कॉलम 0, तो स्क्रैच से पुनर्निर्माण करें।

v = df.values
pd.DataFrame(dict(graph=v[:, 0], result=(df.values[:, 1:] == 'blue').sum(1)))

  graph  result
0     1       5
1     2       5
2     3       3
3     4       2
4     5       1
5     6       5

भोले समय परीक्षण
यहां छवि विवरण दर्ज करें

1
piRSquared 3 अप्रैल 2017, 02:37

pandas.DataFrame.eq:

डेटाफ़्रेम और अन्य, तत्व-वार (बाइनरी ऑपरेटर eq) के बराबर प्राप्त करें।

तुलनात्मक ऑपरेटरों के लिए लचीले रैपर (eq, ne, le, lt, ge, gt) के बीच।

तुलना के लिए अक्ष (पंक्तियों या स्तंभों) और स्तर को चुनने के समर्थन के साथ ==, =!, <=, <, >=, > के बराबर।

सिर्फ संख्याओं के लिए उपयोग करने के लिए नहीं।

उम्मीद है की यह जानकारी लाभदायक होगी

1
Pedro Azevedo 29 पद 2019, 22:22