1

How do you flatten two columns in pandas dataframes?

e.g

Task 1 : company-asset company-debt wealth GOLD SILVER 2000.0 BRONZE IRON 4000.0 IRON GOLD 1500.0 

Now I want (where asset is + and debt is negative)

GOLD SILVER BRONZE IRON 500 -2000 4000 -2500 Task 2: Now i want to get the original dataframe with rows where value of the columns in dataframe 2 is greater than -1000 and less than +1000. So in the case above it will only be GOLD therefore we get this DF company-asset company-debt wealth GOLD SILVER 2000.0 IRON GOLD 1500.0 

2 Answers 2

4

Try this:

s = (df.set_index('wealth').stack() .rename('metal') .rename_axis(('wealth', 'type')) .reset_index() .pipe(lambda l: l.assign(wealth=l.wealth.where(l.type.str.endswith('asset'), -l.wealth))) .groupby('metal').wealth.sum()) ​ s #metal #BRONZE 4000.0 #GOLD 500.0 #IRON -2500.0 #SILVER -2000.0 #Name: wealth, dtype: float64 metals = s[(s > -1000) & (s < 1000)].index df[df['company-asset'].isin(metals) | df['company-debt'].isin(metals)] # company-asset company-debt wealth #0 GOLD SILVER 2000.0 #2 IRON GOLD 1500.0 
Sign up to request clarification or add additional context in comments.

1 Comment

whistle That is impressive.
1

I'm not sure what your first question is.

Here is the answer to the second question

import numpy as np import pandas as pd dd = np.array([['GOLD', 'SILVER',2000.0],['BRONZE', 'IRON', 4000.0], ['IRON', 'GOLD', 1500.0]]) col = ['company-asset', 'company-debt', 'wealth'] a = pd.DataFrame(data = dd,columns = col) for i in range (3): a.loc[i][2] = float(a.loc[i][2]) a[(a['wealth']>-1000) & (a['wealth'] < 4000)] 

This is the output

Out[1]: company-asset company-debt wealth 0 GOLD SILVER 2000 2 IRON GOLD 1500 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.