code: def apply(self, func, *args, **kwargs):
          
          self._prep_pandas_groupby()
  
          def key_by_index(data):
              """Key each row by its index.
              """
              # TODO: Is there a better way to do this?
              for key, row in data.iterrows():
                  yield (key, pd.DataFrame.from_dict(
                      dict([(key, row)]), orient='index'))
  
          myargs = self._myargs
          mykwargs = self._mykwargs
          regroupedRDD = self._distributedRDD.mapValues(
              lambda data: data.groupby(*myargs, **mykwargs))
          appliedRDD = regroupedRDD.map(
              lambda key_data: key_data[1].apply(func, *args, **kwargs))
          reKeyedRDD = appliedRDD.flatMap(key_by_index)
          dataframe = self._sortIfNeeded(reKeyedRDD).values()
          return DataFrame.fromDataFrameRDD(dataframe, self.sql_ctx)
docs: Apply the provided function and combine the results together in the
          same way as apply from groupby in pandas.
  
          This returns a DataFrame.