gpt4 book ai didi

python - 仅保存 pandas df 中的非空条目值和列号,每行仅保存一个非空值

转载 作者:行者123 更新时间:2023-12-01 02:52:32 25 4
gpt4 key购买 nike

我有一个包含许多列的 pandas 数据框,其中大多数为空,但对于每一行,总是有一且只有一列的值为字符串。

我正在数据框中创建一个新列,选择唯一的非空值:

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

这工作正常,但是,我还会跟踪每个条目的其中哪一列是非空的,以便列标签也具有该信息。我如何知道哪一列非空?

Ex.

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

new column label is:

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

最佳答案

您可以首先将 df 转换为 True,其中值是 notnull并通过 idxmax 获取列名称和 lookup对于值:

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

另一个解决方案,谢谢Jon Clements - 使用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

关于python - 仅保存 pandas df 中的非空条目值和列号,每行仅保存一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44590965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com