我有如下数据:
id movie details value
5 cane1 good 6
5 wind2 ok 30.3
5 wind1 ok 18
5 cane1 good 2
5 cane22 ok 4
5 cane34 good 7
5 wind2 ok 2
我希望输出符合以下条件:
如果电影名称以“cane”开头-求和值
如果电影名称以“wind”开头,请计算发生次数。你知道吗
所以-最终输出将是:
id movie value
5 cane1 8
5 cane22 4
5 cane34 7
5 wind1 1
5 wind2 2
我试着用:
movie_df.groupby(['id']).apply(aggr)
def aggr(x):
if x['movie'].str.startswith('cane'):
y = x.groupby(['value']).sum()
else:
y = x.groupby(['movie']).count()
return y
但它不起作用。有人能帮忙吗?你知道吗
可能有多种方法可以做到这一点。一种方法是先按电影名称的开头进行过滤,然后进行聚合和合并。你知道吗
在可能的情况下,您应该瞄准矢量化操作。你知道吗
您可以计算两个结果,然后将它们串联起来。你知道吗
首先,您需要执行字符串操作。我猜在你的情况下,你不想在电影名字里加数字。使用pandas applying regex to replace values中讨论的解决方案。 然后对新序列调用groupby()。你知道吗
仅供参考:有些电影名称只有数字,在这种情况下,您需要使用更新功能。https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.update.html
相关问题 更多 >
编程相关推荐