दिलचस्प पोस्ट
एक निर्दिष्ट तिथि से पुरानी फाइलें हटाने के लिए बैच फ़ाइल सभी जावास्क्रिप्ट कॉलबैक अतुल्यकालिक हैं? यदि नहीं, तो मुझे कैसे पता चलेगा कि कौन हैं? PHP मेल फ़ंक्शन ई-मेल भेजने को पूरा नहीं करता है क्या एसवीएन त्रुटि 413 अनुरोध इकाई बहुत बड़ा कारण है? सिस्टम में एक फ़ाइल में जावा क्या कोई संदर्भ का पता लगाने का कोई तरीका है? मैं वर्णानुक्रम में एक सूची कैसे सॉर्ट कर सकता हूँ? जावास्क्रिप्ट में वैकल्पिक पैरामीटरों को संभालना गतिशील आकार UICollectionView सेल विंडोज में पायथन से एक्सेल ड्राइव करना यह कैसे निर्धारित किया जाता है कि कोई बहुभुज जटिल / उत्तल / गैर-कोनवेक्स है? Server.MapPath और HostingEnvironment.MapPath में अंतर क्या है? क्रोम भेजें अनुरोध त्रुटि: प्रकार एरर: JSON को परिपत्र संरचना परिवर्तित फ़ोल्डर में पहुंच प्रतिबंधित करने के लिए .htaccess गिट पर पुल अनुरोध कैसे भेजें

डेटाफ्रेम सेल के अंदर एक सूची को अलग-अलग पंक्तियों में कैसे विस्फोट करना

मैं उन पन्नों के प्रत्येक पंक्ति के लिए पंक्तियों में सूची वाले पंडों सेल को बदलना चाहता हूं।

तो, इसे लें:

यहां छवि विवरण दर्ज करें

अगर मैं 'निकटतम नेविगोर' कॉलम में मूल्यों को खोलना और ढेर करना चाहता हूं, ताकि प्रत्येक मान 'प्रतिद्वंद्वी' सूचकांक के भीतर एक पंक्ति हो, तो मैं इस बारे में सबसे अच्छा कैसे बताना चाहूँगा? यह? मुझे अभी पता नहीं है।

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

Solutions Collecting From Web of "डेटाफ्रेम सेल के अंदर एक सूची को अलग-अलग पंक्तियों में कैसे विस्फोट करना"

नीचे दिए गए कोड में, मैंने पहले सूचक को फिर से चलना आसान बना दिया था।

मैं सूचियों की एक सूची बनाता हूं जहां बाह्य सूची का प्रत्येक तत्व लक्ष्य डेटाफ्रेम की एक पंक्ति है और आंतरिक सूची का प्रत्येक तत्व स्तंभों में से एक है। यह नेस्टेड सूची आखिरकार वांछित डेटाफ़्रेम बनाने के लिए कन्टानेट की जाएगी।

मैं प्रासंगिक name और opponent साथ मिलकर nearest_neighbors के प्रत्येक तत्व के लिए एक पंक्ति बनाने के लिए सूची nearest_neighbors के साथ lambda समारोह का उपयोग करता हूं।

अंत में, मैं इस सूची से एक नया डेटाफ्रेम बना (मूल कॉलम के नामों का उपयोग करके और सूचक को वापस name और opponent )।

 df = (pd.DataFrame({'name': ['AJ Price'] * 3, 'opponent': ['76ers', 'blazers', 'bobcats'], 'nearest_neighbors': [['Zach LaVine', 'Jeremy Lin', 'Nate Robinson', 'Isaia']] * 3}) .set_index(['name', 'opponent'])) >>> df nearest_neighbors name opponent AJ Price 76ers [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] blazers [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] bobcats [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] df.reset_index(inplace=True) rows = [] _ = df.apply(lambda row: [rows.append([row['name'], row['opponent'], nn]) for nn in row.nearest_neighbors], axis=1) df_new = pd.DataFrame(rows, columns=df.columns).set_index(['name', 'opponent']) >>> df_new nearest_neighbors name opponent AJ Price 76ers Zach LaVine 76ers Jeremy Lin 76ers Nate Robinson 76ers Isaia blazers Zach LaVine blazers Jeremy Lin blazers Nate Robinson blazers Isaia bobcats Zach LaVine bobcats Jeremy Lin bobcats Nate Robinson bobcats Isaia 

जून 2017 को संपादित करें

एक वैकल्पिक तरीका निम्नानुसार है:

 >>> (pd.melt(df.nearest_neighbors.apply(pd.Series).reset_index(), id_vars=['name', 'opponent'], value_name='nearest_neighbors') .set_index(['name', 'opponent']) .drop('variable', axis=1) .dropna() .sort_index() ) 

मुझे लगता है कि यह एक बहुत अच्छा सवाल है, छत्ते में आप EXPLODE इस्तेमाल करेंगे, मुझे लगता है कि ऐसा करने का एक मामला है कि पांडा को इस सुविधा को डिफ़ॉल्ट रूप से शामिल करना चाहिए। आप इस तरह अपनी सूची स्तंभ को विस्फोट कर सकते हैं:

 import numpy as np df = pd.DataFrame({'listcol':[[1,2,3],[4,5,6]]}) X = pd.concat([pd.DataFrame(v, index=np.repeat(k,len(v))) for k,v in df.listcol.to_dict().items()]) 

उसके बाद आप अपने वास्तविक डेटाफ्रेम में वापस pd.merge लिए pd.merge का उपयोग कर सकते हैं, क्योंकि @हॉलपैन्ड्रर ने अपने मूल प्रश्न पर टिप्पणी में सुझाव दिया था।

आवेदन के साथ अच्छे विकल्प समाधान (पीडीएसरीज):

 df = pd.DataFrame({'listcol':[[1,2,3],[4,5,6]]}) # expand df.listcol into its own dataframe tags = df['listcol'].apply(pd.Series) # rename each variable is listcol tags = tags.rename(columns = lambda x : 'listcol_' + str(x)) # join the tags dataframe back to the original dataframe df = pd.concat([df[:], tags[:]], axis=1) 

Hive के EXPLODE कार्यक्षमता के समान:

 def pandas_explode(df, column_to_explode): """ Similar to Hive's EXPLODE function, take a column with iterable elements, and flatten the iterable to one element per observation in the output table :param df: A dataframe to explod :type df: pandas.DataFrame :param column_to_explode: :type column_to_explode: str :return: An exploded data frame :rtype: pandas.DataFrame """ # Create a list of new observations new_observations = list() # Iterate through existing observations for row in df.to_dict(orient='records'): # Take out the exploding iterable explode_values = row[column_to_explode] del row[column_to_explode] # Create a new observation for every entry in the exploding iterable & add all of the other columns for explode_value in explode_values: # Deep copy existing observation new_observation = copy.deepcopy(row) # Add one (newly flattened) value from exploding iterable new_observation[column_to_explode] = explode_value # Add to the list of new observations new_observations.append(new_observation) # Create a DataFrame return_df = pandas.DataFrame(new_observations) # Return return return_df 

उपयोग करें apply(pd.Series) और stack , फिर reset_index और to_frame

 In [1803]: (df.nearest_neighbors.apply(pd.Series) .stack() .reset_index(level=2, drop=True) .to_frame('nearest_neighbors')) Out[1803]: nearest_neighbors name opponent AJ Price 76ers Zach LaVine 76ers Jeremy Lin 76ers Nate Robinson 76ers Isaia blazers Zach LaVine blazers Jeremy Lin blazers Nate Robinson blazers Isaia bobcats Zach LaVine bobcats Jeremy Lin bobcats Nate Robinson bobcats Isaia 

विवरण

 In [1804]: df Out[1804]: nearest_neighbors name opponent AJ Price 76ers [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] blazers [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] bobcats [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia] 

यहां बड़े डेटाफ्रेम के लिए एक संभावित अनुकूलन है यह तेजी से चलता है जब "विस्फोट" फ़ील्ड में कई बराबर मान होते हैं। (बड़ा डेटाफ्रेम फ़ील्ड में अनन्य मान गणना के साथ तुलना की जाती है, तो यह कोड बेहतर प्रदर्शन करेगा।)

 def lateral_explode(dataframe, fieldname): temp_fieldname = fieldname + '_made_tuple_' dataframe[temp_fieldname] = dataframe[fieldname].apply(tuple) list_of_dataframes = [] for values in dataframe[temp_fieldname].unique().tolist(): list_of_dataframes.append(pd.DataFrame({ temp_fieldname: [values] * len(values), fieldname: list(values), })) dataframe = dataframe[list(set(dataframe.columns) - set([fieldname]))]\ .merge(pd.concat(list_of_dataframes), how='left', on=temp_fieldname) del dataframe[temp_fieldname] return dataframe