Python 使用表中的值创建一行,数据仅为对角线
我有下面的熊猫表-Python 使用表中的值创建一行,数据仅为对角线,python,pandas,if-statement,null,append,Python,Pandas,If Statement,Null,Append,我有下面的熊猫表- >>>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 nu
>>>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
我希望去掉reduce the null值,并将数据放在一行中,如下所示:
>>>index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
重要的是,我通过if statemnt获得第一个包含空数据的表;我已经计算了每个指标的统计检验,根据p值,我使用append给出了sig或no 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)
索引中的i的:
统计,p=friedmanchisquare(df[1][i]、df[2][i]、df[3][i]、df[4][i]、df[5][i])
#打印(i,p)
如果pIIUC,则使用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
您可以尝试np.diagonal
返回diagonal
元素:
d = pd.DataFrame([np.diagonal(df)], columns=df.columns)
另一种选择是堆栈
,和液滴层
df.stack().droplevel(0).to_frame().T
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
我认为在这种情况下,np.diagonal
会更有效。向上投票;)
index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
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