Python 展平数据帧中的列并引用原始数据帧

Python 展平数据帧中的列并引用原始数据帧,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,如何展平数据帧中的两列 e、 g 现在我想知道资产是+而债务是负的 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

如何展平数据帧中的两列

e、 g

现在我想知道资产是+而债务是负的

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
试试这个:

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
试试这个:

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

我不确定你的第一个问题是什么

下面是第二个问题的答案

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)]

我不确定你的第一个问题是什么

下面是第二个问题的答案

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)]
令人印象深刻的哨子。