Добавить столбец номеров строк для каждой группы последовательно увеличивающихся дат - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть DataFrame, у которого есть столбец с датой и другие столбцы с некоторыми значениями, и, скажем, первые 100 строк располагаются по порядку в соответствии с датой, и с 101 по 200 снова те же даты, только разные значения и т. Д.,Я хотел бы добавить столбец, который считает количество строк от 1 до 100, и начать снова с 1, когда дата повторится.Пример

Date       | Value | RowNum
2000-01-01 |   2   |    1  
2000-02-01 |   10  |    2
.
.
.
2003-12-01 |  11   |    100
2000-01-01 |  32   |    1  
2000-02-01 |  14   |    2
.
.
.
2003-12-01 |  4    |    100

Мне нужно это для поворота этой таблицы, где столбцы - это даты, значения - это значения, а RowNum будет индексом.Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Объяснение

Создайте новый столбец, выполните итерации по фрейму данных и просто используйте% 100 столбца индекса.Это будет прекрасно работать, если у вас точно 100 дат, как вы упомянули выше.

Код

df[RowNum] = 1
for i, row in df.iterrows():
    RowNum_val = i%100
    df.set_value(i,'RowNum',RowNum_val)

Ресурсы

https://www.geeksforgeeks.org/python-pandas-dataframe-set_value/ https://www.tutorialspoint.com/python_pandas/python_pandas_iteration.htm

0 голосов
/ 26 декабря 2018

Если точные одинаковые даты повторяются, ваша проблема становится очень простой cumsum и cumcount проблемой:

m = df.Date.eq(df.at[df.index[0], 'Date']).cumsum()
df['RowNum'] = df.groupby(m).cumcount() + 1

Если нет, вы можете проверитьdiff:

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
m = df['Date'].diff().dt.total_seconds().fillna(-1).lt(0).cumsum()
df['RowNum'] = df.groupby(m).cumcount() + 1

Или, аналогичным образом, путем преобразования базового массива NumPy в float, а затем диффузии:

s = pd.Series(df['Date'].values.astype(float), index=df.index)
df['RowNum'] = df.groupby(s.fillna(-1).lt(0).cumsum()).cumcount() + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...