Разделять значения в строках как отдельные столбцы - PullRequest
0 голосов
/ 30 мая 2018

У меня есть CSV, который содержит данные, как показано ниже:

date,datetime,year,month,date,value,name
20170430,2017-04-30 18:30:00,2017,04,30,NaN,A1
20170501,2017-05-01 18:30:00,2017,05,01,121.2,A1
20170430,2018-02-07 18:30:00,2018,02,07,1.23,B1
20170501,2017-07-10 18:30:00,2017,07,10,42.2,C1
20170430,2017-04-30 18:30:00,2017,04,30,32.1,C1

Мне нужно получить результат, как показано ниже, то есть значения A1, B1, C1, соответствующие дате, должны быть выделены в отдельный столбец:

date,datetime,year,month,date,A1,B1,C1
20170430,2017-04-30 18:30:00,2017,04,30,NaN,1.23,32.1
20170501,2017-05-01 18:30:00,2017,05,01,121.2,NaN,42.2

Я пытался использовать метод сводных панд Python с индексом в качестве даты и столбцами в качестве имени, но получаю ошибку, как показано ниже, что ожидается, поскольку существует несколько записей для A1 и C1

ValueError: Index contains duplicate entries, cannot reshape

import pandas as pd

df = pd.read_csv("D:/datagenicAPI/finalCSV.csv")
print(df)
df1 = df.pivot(index="date", columns="name")
df1.to_csv("d:/datagenicAPI/test1.csv", sep=",")

Мне нужно разделить столбцы как отдельные, можно ли мне знать, как добиться того же с пандами Python

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Загрузка вашего примера df:

import io
import pandas as pd

s = """
date,datetime,year,month,date,value,name
20170430,2017-04-30 18:30:00,2017,04,30,NaN,A1
20170501,2017-05-01 18:30:00,2017,05,01,121.2,A1
20170430,2018-02-07 18:30:00,2018,02,07,1.23,B1
20170501,2017-07-10 18:30:00,2017,07,10,42.2,C1
20170430,2017-04-30 18:30:00,2017,04,30,32.1,C1
"""
df = pd.read_csv(io.StringIO(s))

Используя pivot_table и reset_index вы получаете:

df.pivot_table('value', ['date', 'datetime', 'year', 'month', 'date.1'], 'name').reset_index()

name      date             datetime  year  month  date.1     A1    B1    C1
0     20170430  2017-04-30 18:30:00  2017      4      30    NaN   NaN  32.1
1     20170430  2018-02-07 18:30:00  2018      2       7    NaN  1.23   NaN
2     20170501  2017-05-01 18:30:00  2017      5       1  121.2   NaN   NaN
3     20170501  2017-07-10 18:30:00  2017      7      10    NaN   NaN  42.2

Обратите внимание, что df содержит столбец, названный pandas как 'date.1', потому чтов вашем примере есть два столбца с именем «date».

0 голосов
/ 30 мая 2018

Я думаю, нужно два шага, drop_duplicates + unstack, затем concat результат

s=df.drop_duplicates('date').iloc[:,:4]
pd.concat([s.set_index('date'),df.set_index(['date','name']).value.unstack()],axis=1)
Out[339]: 
                     datetime  year  month     A1    B1    C1
date                                                         
20170430  2017-04-30 18:30:00  2017      4    NaN  1.23  32.1
20170501  2017-05-01 18:30:00  2017      5  121.2   NaN  42.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...