#python #pandas #if-statement #null #append
#python #pandas #if-оператор #null #добавить
Вопрос:
У меня есть следующая таблица в pandas-
>>>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
Я хотел бы избавиться от уменьшения нулевых значений и разместить данные в одной строке следующим образом:
>>>index1 index2 index3 index4 index5 index6 index7
0 sig sig sig sig no sig no sig sig
Важно сказать, что я получаю первую таблицу с нулевыми данными с помощью if statemnt; Я рассчитал статистический тест для каждого индекса и на основе значения p присваиваю каждому индексу значение sig или без sig, используя append:
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)
Итак, я считаю, что добавление создает большую таблицу со многими нулевыми значениями.
Моя конечная цель: получить таблицу с одной строкой либо на этапе цикла (например, использовать что-то еще, кроме добавления?), Либо «исправить» большую таблицу после, чтобы получить одну строку
Ответ №1:
Вы можете попробовать, 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
Ответ №2:
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
Ответ №3:
Другой вариант с 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
Ответ №4:
Решение pandas для 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