我正在为一个虚构的电视节目制作数据帧。在此数据框架中,有列:"季节"、"情节"、"关于"、"收视率"、"投票"、"收视率"、"持续时间"、"日期"、"宾客"、"明星"、"导演"、"作家",行以升序数值列出。
在这个数据框中,我的问题涉及两列;"作家"one_answers"观众"。在"作家"列中,有些列有多个作者,用"|"。在Viewership列中,每列都有一个浮动值,取值范围在1到23之间,最大为小数点后2位。
这是我正在使用的数据框架的浓缩示例。我正在试着过滤"作家"。列,然后确定每个作者的总平均收视率:
df = pd.DataFrame({'Writers' : ['John Doe','Jennifer Hopkins | John Doe','Ginny Alvera','Binny Glasglow | Jennifer Hopkins','Jennifer Hopkins','Sam Write','Lawrence Fieldings | Ginny Alvera | John Doe','John Doe'], 'Viewership' : '3.4','5.26','22.82','13.5','4.45','7.44','9'})
我提出的拆分列字符串的解决方案:
df["Writers"]= df["Writers"].str.split('|', expand=False)
这将分割字符串,但在某些情况下将在逗号前后留下空白。我需要删除空格,然后我需要列出所有的作者,但每个作者只列出一次。
第二,对于每个作家,我希望有列表明他们的总平均收视率,或每个作者的列表,说明他们的总平均收视率是他们工作过的所有剧集:["John Doe : 15" , "Jennifer Hopkins : 7.54" , "Lawrence Fieldings : 3.7"]
这是我在这里的第一个帖子,我真的很感谢任何帮助!
# I believe in newer versions of pandas you can split cells to multiple rows like this
# here is a reference https://pandas.pydata.org/pandas-docs/stable/whatsnew/v0.25.0.html#series-explode-to-split-list-like-values-to-rows
df2 =df.assign(Writers=df.Writers.str.split('|')).explode('Writers').reset_index(drop=True)
#to remove whitespaces just use this
#this will remove white spaces at the beginning and end of every cell in that column
df2['Writers'] = df2['Writers'].str.strip()
#if you want to remove duplicates, then do a groupby
# this will combine (sum) duplicate, you can use any other mathematical aggregation
# function as well (you can replace sum() by mean())
df2.groupby(['writers']).sum()