#python #pandas #dictionary
#python #pandas #словарь
Вопрос:
У меня есть csv-файл, содержащий значения активности пользователя в социальных сетях за 20 дней. Я хочу получить подробную информацию об активности пользователя в день 1. Вот пример записей в csv
DateTime Instagram Facebook Twitter
(2020,09,01,10,00,00) Y N Y
(2020,09,01,10,01,00) N Y Y
(2020,09,01,10,02,00) N Y N
(2020,09,01,10,03,00) N Y N
(2020,09,01,10,04,00) Y N Y
(2020,09,01,11,00,00) Y N N
(2020,09,02,10,00,00) N Y Y
(2020,09,02,10,00,00) Y N N
(2020,09,02,10,00,00) N N N
(2020,09,03,10,00,00) Y Y Y
Здесь DateTime
столбец представляет собой объект datetime в формате (год, месяц, дата, час, минута, секунда) и в соответствии со значениями, даже если один пользователь активен в приложении для социальных сетей, тогда он считается как Y, если нет, то N
Я создал словарь с именем dict_1, где я хочу, чтобы результат выглядел следующим образом
{'Instagram':[Y,N,N,N,Y,Y],
'Facebook':[N,Y,Y,Y,N,N],
'Twitter':[Y,Y,N,N,Y,N]}
Я написал фрагмент кода для вычисления количества строк до 1-го дня
initial=dataset[DateTime[0]].date().day
final=inital 1
days_x=[]
i=0
while(initial<final):
cons_date=dataset[DateTime[i]].date().day
initial=cons_date.date().day
days_x.append((cons_date.date().day,"-",cons_date.date().month," ",cons_date.time().hour,":",cons_date.time().minute))
i =1
Теперь я написал фрагмент кода, чтобы получить результат, подобный тому, который я показал выше для словаря
dict_1={}
for i in range(1, len(dataset.columns)):
if(dataset.columns[i] not in dict_1):
dict_1[dataset.columns[i]]=[dataset[dataset.columns[i][:len(days_x)]]]
но тогда все строки в столбце включаются в него, и я получаю вывод вместе с индексом следующим образом
{'Instagram':[0 Y
1 N
.....and so on
Как мне это исправить?
Комментарии:
1. пожалуйста, покажите, как должен выглядеть окончательный диктант
2. @luigigi проверьте вопрос, который я отредактировал, желаемый раздел вывода выделяется вторым выделенным блоком
Ответ №1:
Я изменил DateTime
столбец на формат pandas datetime и сгруппировал по дате. Затем создайте dict для каждого дня:
df['DateTime'] = pd.to_datetime(df['DateTime'], format='(%Y,%m,%d,%H,%M,%S)')
for idx, d in df.groupby(df['DateTime'].dt.date):
print(d.drop('DateTime', axis=1).to_dict('list'))
{'Instagram': ['Y', 'N', 'N', 'N', 'Y', 'Y'], 'Facebook': ['N', 'Y', 'Y', 'Y', 'N', 'N'], 'Twitter': ['Y', 'Y', 'N', 'N', 'Y', 'N']}
{'Instagram': ['N', 'Y', 'N'], 'Facebook': ['Y', 'N', 'N'], 'Twitter': ['Y', 'N', 'N']}
{'Instagram': ['Y'], 'Facebook': ['Y'], 'Twitter': ['Y']}