मैं डेटाफ़्रेम की पंक्तियों के माध्यम से पुनरावृति करने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूँ:

df

यहाँ नमूना डेटासेट है:

device_id   s2  s41 s47 s14 s24 s36 s4  s23 s10
3           0   0   0   0.002507676 0   0   0   0   0
5           0   0   0   0   0   0   0   0   0
23          0   0   0   0   0   0   0   0   0
42          0   0   0   0   0   0   0   0   0
61          0   0   0   0   0   0   0   0   0
49          0   0   0   0   0   0   0   0   7.564063476
54          0   0   0   0   0   0   0   0.001098988 0

और प्रत्येक पंक्ति से शीर्ष 3 मानों को क्रमबद्ध करें।

for index, row in df.iterrows():

    row_sorted = row.sort_values(ascending=False)
    print (index,row_sorted)

यहाँ एक नमूना आउटपुट है

123 s16    1.054018
    s17    0.000000
    s26    0.000000

मैंने नीचे दिए गए कोड के साथ भी कोशिश की है:

top_n = 3
    pd.DataFrame({n: df.T[col].nlargest(top_n).index.tolist() 
                  for n, col in enumerate(df.T)}).T

यह सब एक साथ करने के लिए लेकिन यहाँ आउटपुट है:

49 s16 s1 s37 -- 49 यहां पंक्ति संख्या है।

जैसा कि आप देख सकते हैं कि आउटपुट मेल नहीं खाते हैं और पहला आउटपुट सही है।

मैं जो खोज रहा हूं वह एक अंतिम शब्दकोश है जिसमें सूचकांक कुंजी के रूप में और शीर्ष 3 कॉलम मान के रूप में शामिल हैं:

{123 : 's16','s17','s26'}

इनका उपयोग एक अन्य शब्दकोश to_map के माध्यम से पुनरावृति करने के लिए किया जाएगा, जिसमें निम्नलिखित संरचना है: ID": ["s26", "International", "E", "B_TV"] जहां से मैं "ई" और "बी_टीवी" का चयन करूंगा

1
Shuvayan Das 16 नवम्बर 2017, 12:46

1 उत्तर

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

इस वेक्टरकृत दृष्टिकोण का प्रयास करें:

नमूना डीएफ:

In [80]: df = pd.DataFrame(np.random.randint(10, size=(5,7)), columns=['id']+list('abcdef'))
    ...: df = df.set_index('id')
    ...:

In [81]: df
Out[81]:
    a  b  c  d  e  f
id
4   4  0  8  8  4  8
0   2  4  7  3  1  4
9   3  6  5  7  3  4
5   7  6  3  8  9  1
6   3  7  6  1  7  9

समाधान:

In [82]: idx = np.argsort(df.values, axis=1)[:, ::-1][:, :3]

In [83]: pd.DataFrame(np.take(df.columns, idx), index=df.index).T.to_dict('l')
Out[83]:
{0: ['c', 'f', 'b'],
 4: ['f', 'd', 'c'],
 5: ['e', 'd', 'a'],
 6: ['f', 'e', 'b'],
 9: ['d', 'b', 'c']}

PS [:, :3] को [:, :top_n] से बदल देता है

0
MaxU 16 नवम्बर 2017, 13:50