Способ возврата индекса (даты) и заголовка столбцов во фрейме данных, если условие выполнено

#python #pandas

#python #pandas

Вопрос:

Я совсем новичок в python. Я хотел создать функцию, которая вернет мне дату и функции (A, B или C), которые изменили его значение на 10%.

вот как выглядят упрощенные исходные данные

 | Date     | A      | B     | C    |
|:-------- |:------:| -----:|-----:|
| 2020-1-1 | 10.0   | 3.0   | 1.0  |
| 2020-1-2 | 10.0   | 3.0   | 1.2  |
| 2020-1-3 | 10.0   | 3.3   | 1.0  |
| 2020-1-4 | 11.0   | 3.3   | 1.0  |
 

Я создал процентную разницу из этой таблицы, выполнив pct_change() .

 | Date     | A      | B     | C    |
|:-------- |:------:| -----:|-----:|
| 2020-1-1 | Nan    | Nan   | Nan  |
| 2020-1-2 | 0      | 0     | 0.2  |
| 2020-1-3 | 0      | 0.1   | -0.2 |
| 2020-1-4 | 0.1    | 0     | 0    |
 

Если у меня есть только одна функция (например, A), я могу просто сделать df[df['A'] > 0.1] , чтобы получить дату. Но с A, B и C … я не знаю, как с этим справиться.
Результаты, которые я хочу, будут примерно такими:

  • A, 2020-1-4, 0.1
  • B, 2020-1-3, 0.1
  • C, 2020-1-2, 0.2
  • C, 2020-1-3, -0.2

Я не уверен, что мое желание слишком велико, но мои знания и навыки не могут определенно справиться с этим. Любая помощь действительно ценится.

Ответ №1:

Ваш вывод немного сбивает с толку, но, возможно, приведенный ниже код может вам помочь.

Попробуйте это:

 df[df>0.1]
 

Если вы хотите возвращать только тогда, когда целые строки> 0,1, используйте это:

 df[df>0.1].dropna(how='any')
 

Редактировать:

Вы также можете использовать функцию unstack, а затем отфильтровать результаты.

 df_2 = df.unstack()  # use df.abs() if you want the absolut difference
df_2 = df_2[df_2>0.1]
# The output will be a series. You can convert it back to dataframe using:
df_2 = df_2.to_frame()
 

Комментарии:

1. Функция unstack сделала это!! Я никогда не думал, что есть другой вариант, кроме выполнения функции или цикла по всем столбцам. ты сделал мой день! вчера мне было так неловко, и мне нужно было бегать ночью, чтобы успокоиться: D Большое вам спасибо за вашу удивительную помощь.

2. Нет проблем. Рад помочь. Циклы, на мой взгляд, это последний способ решить что-то на Python, но я не эксперт. Если вы считаете, что моего вопроса достаточно, вы можете принять его в значке проверки.