簡體   English   中英

僅從pandas df保存非空條目值和列號,每行僅一個非空值

[英]Saving only non-null entry value and column number from pandas df with only one non-null value per row

我有一個帶有許多列的pandas數據框,其中大多數為null,但對於每一行,總是只有一列,並且只有一列的值是字符串。

我在數據框中創建一個新列,該列選擇唯一的非null值:

data[label] = data.iloc[:,0]  
for col in range(1,100) :
    data[label] = data[label].fillna(data.iloc[:,col])

這樣做很好,但是,我還將跟蹤每個條目中哪一列是非null的,以便該列標簽也具有該信息。 我怎么知道哪一列是非空的?

Ex.

col0      col1     col2
          "red"
"blue"
                  "yellow"

new column label is:

label
"red"/col1
"blue"/col0
"yellow"/col2

你可以先轉換dfTrue地方是通過數值• notnull並獲得列名idxmaxlookup的值:

cols = df.notnull().idxmax(axis=1)
df['a'] = df.lookup(df.index, cols) + '/' + cols
print (df)
   col0 col1    col2            a
0   NaN  red     NaN     red/col1
1  blue  NaN     NaN    blue/col0
2   NaN  NaN  yellow  yellow/col2

fillnasum另一種解決方案:

cols = df.notnull().idxmax(axis=1)
df['a'] = df.fillna('').sum(axis=1) + '/' + cols
print (df)
   col0 col1    col2            a
0   NaN  red     NaN     red/col1
1  blue  NaN     NaN    blue/col0
2   NaN  NaN  yellow  yellow/col2

另一個解決方案, first_valid_index ·克萊門茨 -使用first_valid_index

cols = df.apply(pd.Series.first_valid_index, axis=1)
df['a'] = df.lookup(cols.index, cols)  + '/' + cols
print (df)
   col0 col1    col2            a
0   NaN  red     NaN     red/col1
1  blue  NaN     NaN    blue/col0
2   NaN  NaN  yellow  yellow/col2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM