如何对具有多个字符串的.csv列进行排序(Python)

2024-10-05 14:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图找到这本书中每种体裁的平均评分,我遇到了一个问题。“类型”列有多个以逗号分隔的类型(例如,《黑夜》有3个类型:动作、犯罪、戏剧)。我写的代码只有在每行只有一种类型,并且不确定如何扫描具有多种类型的列时才起作用

data = pd.read_csv('movies.csv') # read in file
dataGenre = data
df5 = pd.DataFrame(data={"Genre":dataYearScore['Genre'], "Score": dataYearScore['Score']})

genre_list5 = []
avg_scores5 = []

for genre in df5["Genre"].unique():
    genre_list5.append(genre)
    avg_scores5.append(df5.loc[df5["Genre"]==genre, "Score"].mean())

plt.bar(genre_list5, avg_scores5, width = 0.8)
plt.xlabel('Genre')
plt.ylabel('Score')
plt.xticks(rotation=65)
plt.title('Average Score for Each Genre')
plt.show() 

如果有人能帮忙,我会非常感激:)

Here is a photo of what the data looks like

Udate:是否可以为每种类型制作一个新的列表?这应该会更容易,我只需要想办法


Tags: csvin类型readdatapltavgpd
2条回答

我会这样做:

from collections import defaultdict
counter = defaultdict(list)

for idx, row in df5.iterrows():
    genres = row['Genre']
    score = row['Score']
    for genre in genres.split(','):
        counter[genre].append(score)

现在你有了每种类型的分数

你可以使用分裂和爆炸

df = df.assign(Genre=df['Genre'].str.split(',')).explode('Genre').reset_index(drop=True)

相关问题 更多 >