问题描述
我在熊猫中有下表-
>>>index1 index2 index3 index4 index5 index6 index7
0 sig null null null null null null
1 null sig null null null null null
2 null null sig null null null null
3 null null null sig null null null
4 null null null null no sig null null
5 null null null null null no sig null
6 null null null null null null sig
我想摆脱减少null值的问题,并将数据放在这样的一行中:
>>>index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
很重要的一点是,如果使用statemnt,我将获得具有空数据的第一个表;我已经为每个索引计算了统计检验,并根据p值,使用append给出了sig或没有sig的每个索引值:
for i in indices:
stat,p = friedmanchisquare(df[1][i],df[2][i],df[3][i],df[4][i],df[5][i])
#print(i,p)
if p<0.05:
friedman=friedman.append({i:'sig'},ignore_index=True)
else:
friedman=friedman.append({i:'no sig'},ignore_index=True)
因此,我相信附加文件会创建包含许多空值的大表。
我的最终目标:在循环阶段中获取一张表(例如,使用除append之外的其他内容),或者在大表之后“修复”以获得一张表
解决方法
您可以尝试返回np.diagonal
个元素的diagonal
:
d = pd.DataFrame([np.diagonal(df)],columns=df.columns)
index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
,
IIUC,使用pandas.DataFrame.bfill
:
new_df = df.bfill().head(1)
print(new_df)
输出:
index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
,
使用stack
和droplevel
的另一个选择;
df.stack().droplevel(0).to_frame().T
index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
,
np.diagonal
的熊猫解决方案是df.lookup
df_diag = pd.DataFrame([df.lookup(df.index,df.columns)],columns=df.columns)
Out[47]:
index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no-sig no-sig sig