У меня есть 2 кадра данных Python:
Первый Dataframe содержит все данные, импортированные в DataFrame, который состоит из «prodcode», «sentiment», «summaryText», «reviewText» и т. Д. всех исходных данных обзора.
DFF = DFF[['prodcode', 'summaryText', 'reviewText', 'overall', 'reviewerID', 'reviewerName', 'helpful','reviewTime', 'unixReviewTime', 'sentiment','textLength']]
, который производит:
prodcode summaryText reviewText overall reviewerID ... helpful reviewTime unixReviewTime sentiment textLength
0 B00002243X Work Well - Should Have Bought Longer Ones I needed a set of jumper cables for my new car... 5.0 A3F73SC1LY51OO ... [4, 4] 08 17, 2011 1313539200 2 516
1 B00002243X Okay long cables These long cables work fine for my truck, but ... 4.0 A20S66SKYXULG2 ... [1, 1] 09 4, 2011 1315094400 2 265
2 B00002243X Looks and feels heavy Duty Can't comment much on these since they have no... 5.0 A2I8LFSN2IS5EO ... [0, 0] 07 25, 2013 1374710400 2 1142
3 B00002243X Excellent choice for Jumper Cables!!! I absolutley love Amazon!!! For the price of ... 5.0 A3GT2EWQSO45ZG ... [19, 19] 12 21, 2010 1292889600 2 4739
4 B00002243X Excellent, High Quality Starter Cables I purchased the 12' feet long cable set and th... 5.0 A3ESWJPAVRPWB4 ... [0, 0] 07 4, 2012 1341360000 2 415
Второй Dataframe - это группа всех prodcodes и отношения оценки настроения / всех отзывов, сделанных для этого продукта. Это соотношение для этой оценки обзора ко всем оценкам, сделанным для данного конкретного продукта.
df1 = (
DFF.groupby(["prodcode", "sentiment"]).count()
.join(DFF.groupby("prodcode").count(), "prodcode", rsuffix="_r"))[['reviewText', 'reviewText_r']]
df1['result'] = df1['reviewText']/df1['reviewText_r']
df1 = df1.reset_index()
df1 = df1.pivot("prodcode", 'sentiment', 'result').fillna(0)
df1 = round(df1 * 100)
df1.astype('int')
sorted_df2 = df1.sort_values(['0', '1', '2'], ascending=False)
, который производит следующий DF:
sentiment 0 1 2
prodcode
B0024E6QOO 80.0 0.0 20.0
B000GPV2QA 67.0 17.0 17.0
B0067DNSUI 67.0 0.0 33.0
B00192JH4S 62.0 12.0 25.0
B0087FSA0C 60.0 20.0 20.0
B0002KM5L0 60.0 0.0 40.0
B000DZBP60 60.0 0.0 40.0
B000PJCBOE 60.0 0.0 40.0
B0033A5PPO 57.0 29.0 14.0
B003POL69C 57.0 14.0 29.0
B0002Z9L8K 56.0 31.0 12.0
То, что я сейчас пытаюсь сделать, фильтрует мой первый кадр данных двумя способами. Первый, по результатам второго фрейма данных. Под этим я подразумеваю, что я хочу, чтобы первый кадр данных был отфильтрован с помощью продкода от второго кадра данных, где df1.sentiment ['0']> 40. Из этого списка я хочу отфильтровать первый кадр данных по тем строкам, в которых 'сентимент' с первого кадра данных = 0.
На высоком уровне я пытаюсь получить prodcode, summaryText и reviewText в первом кадре данных для продуктов, которые имеют высокие коэффициенты в более низких оценках настроения и настроение которых равно 0.