我有以下表格:
<表类>
词数
功能
tbody><<tr>我的 0 代词 的 0 首选项 食品 0 对象 0 是 冰0 甜点 奶油 1 甜点 表类>
您尝试过groupby()
函数吗?在本例中:
In [1]: df.groupby(["feature", "word"]).size()
Out[2]: word feature
dessert ice 1
cream 1
food object 1
dtype: int64
首先,使用pandas
库。它包含了你最终会使用的许多函数的矢量化实现,所以它比在数百行上循环要快得多。
首先,将csv文件读入pandas数据框架:
df = pd.read_csv('csv_file.csv')
对于给定的示例,这将产生如下所示的数据框架:
word count feature
0 my 0 pronoun
1 favorite 0 preferences
2 food 0 object
3 is 0 being
4 ice 0 dessert
5 cream 1 dessert
现在,定义一个函数,该函数接受一行,并计算关键字在随后的100行中出现的次数:
def count_in_next_100(row, keyword):
row_index = row.name # Since the index is numeric, row.name will be the row number
# Take the feature column for the next 100 rows
# Check which of these are == keyword, which will give a bunch of True/False
# Then take their .sum(), so you get the number that are True
total = (df.loc[row_index:row_index+100, "feature"] == keyword).sum()
return total # Return this value.
接下来,将此函数应用于每一行的数据框架,即axis=1
count_dessert = df.apply(count_in_next_100, axis=1, args=("dessert",))
然后,count_dessert.idxmax()
将为您提供在随后的100行中dessert
出现次数最多的行号。我将留下"查找前3名"这部分作为你的练习,如果你需要帮助,请告诉我。