Вопрос: Как фильтровать строки таким образом, что я возвращаю только строки, в которых инъекция не равна 0 или NaN, и не теряет значения других столбцов?Использование IndexSlice для фильтрации данных мультииндекса с помощью Pandas
У меня есть dataframe, созданный с помощью следующего кода:
import pandas as pd
df=pd.DataFrame(
[
[5777, 100, 5385, 200, 5419, 4887, 100, 200],
[4849, 0, 4539, 0, 3381, 0, 0, ],
[4971, 0, 3824, 0, 4645, 3424, 0, 0, ],
[4827, 200, 3459, 300, 4552, 3153, 100, 200, ],
[5207, 0, 3670, 0, 4876, 3358, 0, 0, ],
],
index=pd.to_datetime(['2010-01-01',
'2010-01-02',
'2010-01-03',
'2010-01-04',
'2010-01-05']),
columns=pd.MultiIndex.from_tuples(
[('Portfolio A', 'GBP', 'amount'),
('Portfolio A', 'GBP', 'injection'),
('Portfolio B', 'EUR', 'amount'), ('Portfolio B', 'EUR', 'injection'),
('Portfolio C', 'USD', 'amount'), ('Portfolio C', 'USD', 'injection'),
('Portfolio D', 'JPY', 'amount'), ('Portfolio D', 'JPY', 'injection')])
).sortlevel(axis=1)
Следующая я могу создать DataFrame с ломтиком данных (в данном случае это все данные)
df1=df.loc[pd.IndexSlice[:], pd.IndexSlice[:,:, ['amount', 'injection']]]
Далее создайте новый DataFrame, где есть инъекция! = 0
df2=df1[df1.loc[pd.IndexSlice[:], pd.IndexSlice[:, :, 'injection']]!=0]
Вопрос: Почему это сбросило все значения в столбце «сумма» в NaN?
Следующего шаг раза сумм доступен, чтобы удалить строки со всем NaN
df3=df2.dropna(axis=0, how='all', thresh=None, subset=None, inplace=False)
Желаемого выходом всех данные через индексы строк:
2010-01-01
2010-01-03
2010-01-04
2010-01-05
В вашем ответе отсутствуют данные из '2010-01-03' и '2010-01-05' для 'Портфолио C' – toasteez
Извините, какой желаемый результат? Фильтровать строки со всеми значениями, не равными '0', или фильтровать, по крайней мере, на одно значение не равное' 0'? – jezrael
Желаемый вывод состоит в том, чтобы исключить любую строку для заданной даты, которая имеет все значения, не равные '0', я думаю, что сначала необходимо заменить« NaNs »нулем. – toasteez