Почему мои данные пусты, когда я добавляю их в столбец данных? - PullRequest
0 голосов
/ 14 декабря 2018

Я использую фильтр для проверки условий в моем фрейме данных, чтобы я мог пометить их.

filtering = (dfsamen.shift(0).moving=='movingToclose') & (more condtions)
dffilter = pd.Dataframe(data=filtering, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime']

Вывод:

фильтрация

4     False
5     False
6      True
7      True

dffilter

4    False 2018-06-03 06:33:38.593
5    False 2018-06-03 06:33:39.197
6     True 2018-06-03 06:33:40.597
7     True 2018-06-03 06:33:41.800

Но позже я использую один и тот же код с разными условиями, и это нене работает

filtering2 = (dfsamen.shift(0).Input5==1) | (more conditions)
dffilter2 = pd.DataFrame(data=filtering2, columns=['filter2'])
dffilter2['DateTime'] = dfsamen['DateTime']

Вывод:

filtering2

4     False
5      True
6      True
7      True

dffilter2 (до добавления даты и времени)

Empty DataFrame
Columns: [filter2]
Index: []

dffilter2 (сdatetime)

4      NaN 2018-06-03 06:33:38.593
5      NaN 2018-06-03 06:33:39.197
6      NaN 2018-06-03 06:33:40.597
7      NaN 2018-06-03 06:33:41.800

Так почему мои данные исчезают во втором фильтре, когда я добавляю их в столбец, если данные существуют в filtering2?

1 Ответ

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

Проблема в вашем DataFrame конструкторе, поскольку по умолчанию создается RangeIndex, поэтому возможны разные индексы в обоих фреймах данных, данные не выровнены, и вы получите столбец NaNs для строк с разными значениями индекса.

Решениепреобразование значений в числовые массивы:

filtering = (dfsamen.shift(0).moving=='movingToclose') & (more condtions)

dffilter = pd.DataFrame(data=filtering.values, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)

Sample :

dfsamen = pd.DataFrame({
        'A':list('abc'),
        'DateTime':pd.date_range('2015-01-01', periods=3),
        'C':[7,8,9]
}, index=[4,5,6])

print (dfsamen)
   A   DateTime  C
4  a 2015-01-01  7
5  b 2015-01-02  8
6  c 2015-01-03  9

filtering = dfsamen.A == 'a'

dffilter = pd.DataFrame(data=filtering.values, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)
   filter   DateTime
0    True 2015-01-01
1   False 2015-01-02
2   False 2015-01-03

Или используйте Series.to_frame для преобразования Series в DataFrameс одним столбцом:

filtering = dfsamen.A == 'a'

dffilter = filtering.to_frame('filter')
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)
   filter   DateTime
4    True 2015-01-01
5   False 2015-01-02
6   False 2015-01-03
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...