【发布时间】:2017-03-08 23:04:46
【问题描述】:
问题:如何过滤行,以便只返回注入不等于 0 或 NaN 的行而不丢失其他列的值?
我有一个使用以下代码创建的数据框:
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
【问题讨论】:
标签: python pandas slice nan multi-index