#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, но я не эксперт. Если вы считаете, что моего вопроса достаточно, вы можете принять его в значке проверки.