Python 展平数据帧中的列并引用原始数据帧
如何展平数据帧中的两列 e、 g 现在我想知道资产是+而债务是负的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
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)]
令人印象深刻的哨子。