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