Get Non Zero Values For Each Column In Pandas
I have pandas dataframe as df: accel access adviser afpif  afp   publish  afraid verizon 0.00  0.14    0.00   0.00   0.00   0.13    0.00   0.44 0.13  0.00    0.00   0.77   0.00   0
Solution 1:
Use DataFrame.loc with dict comprehension and iat if always exist at least one non 0 value:
d = {c: df.loc[df[c] ! =0, c].iat[0] for c in L }
print (d)
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}
More general working with only 0 columns too:
d = {c: next(iter(df.loc[df[c] != 0, c]), 'no value') for c in L }
print (d)
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}
Solution 2:
Thanks to @jpp, not using chained indexing and using .loc instead - 
op = { col: df.loc[df[col].ne(0), col].tolist() for col in L }
Output -
{'accel': [0.13], 'afp': [0.34], 'publish': [0.13]}
This implementation will be more robust in the sense it can retrieve multiple non-zero values. However, if you are sure you just want the one value, you can filter it out inside the dict comprehension itself - 
op = { col: df.loc[df[col].ne(0), col].iat[0] for col in L }
OR
op = { col: df.loc[df[col].ne(0), col].values[0] for col in L }
Output -
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}
Note: If you are sure your non-zero values are positive, you can use >0 or the Series.gt() API
Solution 3:
One line answer would be:
df.sum().to_dict()
Post a Comment for "Get Non Zero Values For Each Column In Pandas"