मेरे पास सूचियों से बने कॉलम के साथ एक पांडा डेटाफ़्रेम है।
लक्ष्य प्रत्येक सूची के न्यूनतम को पंक्ति में (एक कुशल तरीके से) खोजना है।

उदा.

import pandas as pd
df = pd.DataFrame(columns=['Lists', 'Min'])
df['Lists'] = [ [1,2,3], [4,5,6], [7,8,9] ]
print(df)

लक्ष्य Min कॉलम है:

       Lists  Min
0  [1, 2, 3]  1
1  [4, 5, 6]  4
2  [7, 8, 9]  7

अग्रिम धन्यवाद,
गिलो

4
Gilberto 6 फरवरी 2017, 12:44
चूंकि आपकी pandas डेटा संरचनाएं object प्रकार का उपयोग कर रही हैं, आप दक्षता को मार रहे हैं।
 – 
juanpa.arrivillaga
6 फरवरी 2017, 12:45
@ juanpa.arrivillaga यह इस एल्गो का आउटपुट है df["b"] =np.array(map(list,[df["a"].shift(x) for x in range(1,4)])).T.tolist() - देखें [ stackoverflow.com/questions /37967824/…. क्या गति बढ़ाने का कोई तरीका है?
 – 
Gilberto
6 फरवरी 2017, 13:14
1
मुद्दा यह है कि आप अपने DataFrame के अंदर सूचियां डाल रहे हैं, इसे dtype object बना रहे हैं। dtype अंतर्निहित numpy डेटा संरचना के लिए विरासत में मिला है, और object dtypes धीमे हैं। यह एल्गोरिदम नहीं है, यह आपकी डेटा संरचना है।
 – 
juanpa.arrivillaga
6 फरवरी 2017, 13:17

1 उत्तर

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

आप apply का इस्तेमाल कर सकते हैं min के साथ:

df['Min'] = df.Lists.apply(lambda x: min(x))
print (df)
       Lists  Min
0  [1, 2, 3]    1
1  [4, 5, 6]    4
2  [7, 8, 9]    7

धन्यवाद ">juanpa.arrivillaga विचार के लिए:

df['Min'] = [min(x) for x in df.Lists.tolist()]
print (df)
       Lists  Min
0  [1, 2, 3]    1
1  [4, 5, 6]    4
2  [7, 8, 9]    7

समय:

##[300000 rows x 2 columns]
df = pd.concat([df]*100000).reset_index(drop=True)

In [144]: %timeit df['Min1'] = [min(x) for x in df.Lists.values.tolist()]
10 loops, best of 3: 137 ms per loop

In [145]: %timeit df['Min2'] = [min(x) for x in df.Lists.tolist()]
10 loops, best of 3: 142 ms per loop

In [146]: %timeit df['Min3'] = [min(x) for x in df.Lists]
10 loops, best of 3: 139 ms per loop

In [147]: %timeit df['Min4'] = df.Lists.apply(lambda x: min(x))
10 loops, best of 3: 170 ms per loop
6
Community 23 मई 2017, 15:33
2
ठीक है, Lists कॉलम पर एक सूची-समझ तेज हो सकती है।
 – 
juanpa.arrivillaga
6 फरवरी 2017, 12:46
धन्यवाद @jezrael (उत्तर की अद्भुत गति)
 – 
Gilberto
6 फरवरी 2017, 12:46
@juanpa.arrivillaga धन्यवाद।
 – 
Gilberto
6 फरवरी 2017, 12:47
@ juanpa.arrivillaga - बहुत-बहुत धन्यवाद, आप सही हैं - मैं समाधान के लिए समय जोड़ता हूं।
 – 
jezrael
6 फरवरी 2017, 12:54