我有一个df,
contents values scoresBinned categories
0 Buy 484 (375, 500] Bin 4
1 Sell 429 (375, 500] Bin 4
2 Blanks 130 (125, 250] Bin 2
3 A 108 (0, 125] Bin 1
4 B 77 (0, 125] Bin 1
5 F 2 (0, 125] Bin 1
因为我需要Bin作为我的标题我正在做df,pivot
filter_df1=df[["contents","categories"]]
pivot_df=filter_df1.pivot(columns="categories")
print(pivot_df)
contents
categories Bin 1 Bin 2 Bin 4
0 None None Buy
1 None None Sell
2 None Blanks None
3 A None None
4 B None None
5 F None None
我尝试了df.dropna(),但删除了整行,
我想要的df是,
Bin 1 Bin 2 Bin 4
A Blanks Buy
B Sell
F
答案 0 :(得分:2)
您可以使用sorted
,boolean indexing
和fillna
来执行此操作。
pm = pivot_df.apply(sorted,key=pd.isnull)
new = pm[~pd.isnull(pm).all(1)].fillna('')
输出:
contents categories Bin 1 Bin 2 Bin 4 0 A Blanks Buy 1 B Sell 2 F
解释:
基于None的排序将给出
contents categories Bin 1 Bin 2 Bin 4 0 A Blanks Buy 1 B None Sell 2 F None None 3 None None None 4 None None None 5 None None None
现在选择那些行中所有值都不为空的行。所以我们可以使用~pd.isnull(pm).all(1)
(这里~
不是将false转换为true的运算符,反之亦然)。哪个会给出
0 True 1 True 2 True 3 False 4 False 5 False dtype: bool
后来boolen索引选择数据,pm[~pd.isnull(pm).all(1)]
contents categories Bin 1 Bin 2 Bin 4 0 A Blanks Buy 1 B None Sell 2 F None None
fillna('')
将使用''
填充无值。希望它有所帮助。