【问题标题】:The .apply() method is not working.apply() 方法不起作用
【发布时间】:2018-04-17 17:11:55
【问题描述】:

所以friends 是一个在每个实例中都有一个列表的列,例如df['friends][0] = [id1, id2, ..., idn]。我正在尝试在单独的列中计算朋友的数量,例如df['friend_counts'][0] = n

我做了以下事情。我在其他数据集中使用过这段代码,但由于某种原因,它需要很长时间,而且数据集只有 300,000 个实例。

df_user['friend_counts'] = df_user['friends'].apply(lambda x: len(df_user.friends[x]))

此外,出于某种原因,以下代码创建了一个 season 列,但未填充,即它只是空格。这很麻烦,因为我对所有其他数据集都执行了完全相同的代码。他们是否更改了.apply() 方法?

#Convert 'date' to a date time object
df_reviews["date"] = pd.to_datetime(df_reviews["date"])
#Splitting up 'release_date' -> 'release_weekday', 'release_month', 
'release_year'
df_reviews["weekday"] = df_reviews["date"].dt.weekday_name
df_reviews["month"] = df_reviews["date"].dt.month
df_reviews["year"] = df_reviews["date"].dt.year
### Helper function
def season_converter(month_name):
""" Returns the season a particular month is in """
season = ""`enter code here`
#Winter
if month_name in ['Jan', 'Feb', 'Dec']:
    season = "Winter" 
#Spring
if month_name in ['Mar', 'Apr', 'May']:
    season = "Spring" 
#Summer
if month_name in ['Jun', 'Jul', 'Aug'] : 
    season = "Summer"
#Fall
if month_name in ['Sep', 'Oct', 'Nov']: 
    season = "Fall"
#Other
if month_name == "NA":
    season = "NA"
return season
#Create a new column that holds seasonal information
df_reviews['season'] = df_reviews['month'].apply(lambda x: 
season_converter(x))

【问题讨论】:

  • 对您的代码的简短扫描表明,season_converter() 函数接收到一个字符串的月份名称,但您在 lambda 函数中将一个整数传递给它 (df_reviews['month']) .
  • @floydn 你说得对,我想我在复制和粘贴时忘记添加另一个帮助函数。就friends 代码而言,它只是计算密集型的,对吧?我只需要等待它完成吗?

标签: python-3.x pandas apply


【解决方案1】:

我建议使用map by dictionary 来提高性能:

d = {1:'Winter', 2:'Winter', 12:'Winter', 3: 'Spring', .... np.nan:'NA', 'NA':'NA'}
df_reviews['season'] = df_reviews['month'].map(d)

如果可能的话,另一种解决方案是使用数字季节:

df_reviews['season'] = (df_reviews['month'] % 12 + 3) // 3

【讨论】:

  • 谢谢!您是否碰巧知道“朋友”部分可能有什么问题?它只是计算密集型的吗?
  • @handavidbang - 是的,完全正确。还有问题函数输入数字月份,而不是Jan', 'Feb', 'Dec'
猜你喜欢
  • 2016-08-31
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多