我有一个简单的数据框,其中包含一列,标题为DD
,如下所示。
我想从df
创建一个新的数据框,如下所示。
Name > <NR-AR> > <NR-AR-LBD> > <NR-AhR> > <NR-ER> > <NR-ER-LBD> > <NR-PPAR-gamma> > <SR-ARE>
NCGC00261443-01 0 0 0 0 0 0 0
所以模式应该如上所述。
答案 0 :(得分:1)
您可以使用:
L = ['NAME','NCGC00261443-01','> <NR-AR>','0','> <NR-AR-LBD>','0',' > <NR-AhR>','0']
df = pd.DataFrame({'DD': L + L[:4]})
df.loc[9] = 'NCGC00261600-01'
print (df)
DD
0 NAME
1 NCGC00261443-01
2 > <NR-AR>
3 0
4 > <NR-AR-LBD>
5 0
6 > <NR-AhR>
7 0
8 NAME
9 NCGC00261600-01
10 > <NR-AR>
11 0
#reshape to 2 column df
df = pd.DataFrame(df['DD'].values.reshape(-1, 2), columns=['a','b'])
print (df)
a b
0 NAME NCGC00261443-01
1 > <NR-AR> 0
2 > <NR-AR-LBD> 0
3 > <NR-AhR> 0
4 NAME NCGC00261600-01
5 > <NR-AR> 0
#value NAME distinguish first value of new row
#reshape and change ordering of columns by reindex
#last set default index values (0,1,2...)
df1 = (df.set_index([df['a'].eq('NAME').cumsum(), 'a'])['b']
.unstack()
.reindex(columns=pd.unique(df['a']))
.reset_index(drop=True))
print (df1)
a NAME > <NR-AR> > <NR-AR-LBD> > <NR-AhR>
0 NCGC00261443-01 0 0 0
1 NCGC00261600-01 0 None None
详情:
print (df['a'].eq('NAME').cumsum())
0 1
1 1
2 1
3 1
4 2
5 2
Name: a, dtype: int32
答案 1 :(得分:0)
也许这会帮助你
import pandas as pd
df=df.dropna()
col_name=[]
data=[]
for idx, val in enumerate(df['DD']):
if idx %2 ==0:
col_name.append(val)
else:
data.append(val)
df1=pd.DataFrame(data=data, columns=col_name)