У меня есть файл CSV с твитами, имеющими 4 столбца (user_Id, status, tweet_Id, tweet_text) и более 50000 строк. Первый столбец user_id имеет 4 уникальных идентификатора, которые повторяются по всему столбцу. Статус второго столбца - это двоичная классификация, имеющая 0 или 1 для каждого твита. Третий столбец - идентификатор твита, а четвертый - текст твита. Для первого столбца.
Входной файл уже отсортирован по двум столбцам, сначала tweet_id, а затем user_id. Файл выглядит следующим образом:
Sr#, user_id, status, tweet_id, tweet_text
1, 3712, 1, 444567, It is not easy to to do this you know...
2, 3713, 0, 444567, It is not easy to to do this you know...
3, 3714, 1, 444567, It is not easy to to do this you know...
4, 3715, 1, 444567, It is not easy to to do this you know...
5, 3712, 1, 444572, The process is yet to start
6, 3713, 0, 444572, The process is yet to start
7, 3714, 0, 444572, The process is yet to start
8, 3712, 1, 444580, I am betting on this
9, 3714, 0, 444580, I am betting on this
10, 3715, 0, 444580, I am betting on this
and so on.......
Если мы наблюдаем первые 4 строки, значение user_id равно разные, но tweet_id и текст совпадают. Аналогично для рядов нет. 4, 5 и 6, user_id отличается, но tweet_id и text одинаковы.
Я должен написать новый CSV-файл, в котором для каждого tweet_id и text все идентификаторы пользователя первого столбца (в этом примере 4) создаются как новые столбцы, и для каждого столбца идентификатора пользователя значение классификации для этого твита, который является столбцом статуса, записывается под новым столбцом идентификатора. Если нет значения статуса для worker_id, тогда значение статуса этого user_id остается пустым.
Выходной файл может выглядеть следующим образом.
Sr#, tweet_text, tweet_id, 3712, 3713, 3714, 3715
1, It is not easy to to do this you know..., 444567, 1, 0, 1, 1
2, The process is yet to start, 444572, 1, 0, 0,
3, I am betting on this, 444580, 1, 0, 0
Я попытался предположить, что всякий раз, когда изменяется tweet_id, статус tweet_id, tweet_text и четыре уникальных идентификатора записываются в новый файл. Код, который я использовал, приведен ниже:
import csv
import pandas as pd
with open('combined_csvFinalSortedClean2.csv', 'w', newline='') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
filewriter.writerow(['tweet_id','tweet_text', '3712', '3713', '3714', '3714'])
df = pd.read_csv('combined_csvFinalSortedClean2.csv', sep=',', header=None, index_col=False)
with open("combined_csvFinalSorted2.csv", "r", encoding="utf-8") as csv_file:
reader = csv.reader(csv_file, delimiter=',')
header = next(reader) # get header
curr_tweet=0
curr_wid=0
count=0
for row in reader:
wid=row[0]
id=row[2]
if (curr_tweet!=id) and (curr_wid!=wid):
curr_tweet=id
curr_wid=wid
count=1
df[0]=id
df[1]=row[3]
if wid==3712:
df[2]=row[2]
else:
df[2] = None
if wid==3713:
df[3]=row[2]
else:
df[3]= None
if wid==3714:
df[4]=row[2]
else:
df[4] = None
if wid==3715:
df[5]=row[2]
else:
df[5] = None
df.to_csv('output_file.csv', sep=',', encoding='utf-8', index=False)
count+=1
#else:
#None
#count+=1
Я пробовал это, но проблема в том, что модуль to_csv pandas 'записывает только последнюю строку в новый выходной файл и ничего не записывает в четыре уникальных Столбцы Id, основанные на заданных условиях if ... else. Я буду признателен за помощь.
Спасибо.