繁体   English   中英

用编号变量填空 DataFrame - Python Pandas

[英]Filling in blanks on a DataFrame with numbered variables - Python Pandas

我有一个 DataFrame 的格式:

ID    Theme    Operation    Volume
100  Jungle       S3         Full
200  Desert       S3         Full
302  Cavern       S1         Empty
303  Swamp        nan        Full
400  Jungle       S3          nan
600  Desert       nan        Empty

我想编写一个脚本来遍历空单元格并从“nan”重新分配它们,并用变量 NA_ 替换它们,其中 _ 是它们缺少变量的计数。 所以我想要的 output 是:

ID    Theme    Operation    Volume
100  Jungle       S3         Full
200  Desert       S3         Full
302  Cavern       S1         Empty
303  Swamp        NA1        Full
400  Jungle       S3          NA3
600  Desert       NA2        Empty

当我尝试遍历 df 并识别 nan 值时,出于某种原因,以下内容无效。

count = 0
for col in df.colums:
    for row in df[col]:
        if row == float('nan'):
            row = 'NA{}'.format(count)
            count += 1

任何想法为什么? 或者有没有更好的方法来做到这一点,我很难看到?

谢谢:)

连接您的列,将 NaN 替换为 NA_(_ 替换为num )并拆分您的列。 最后将修改后的列覆盖为原始 dataframe:

tmp = df.reset_index().melt(id_vars='index', value_vars=['Operation', 'Volume'])
num = (tmp['value'].isna().cumsum()).astype(int)
tmp['value'] = tmp['value'].fillna('NA' + num.astype(str))
tmp = tmp.pivot(index='index', columns='variable', values='value')
df[tmp.columns] = tmp
>>> df
    ID   Theme Operation Volume
0  100  Jungle        S3   Full
1  200  Desert        S3   Full
2  302  Cavern        S1  Empty
3  303   Swamp       NA1   Full
4  400  Jungle        S3    NA3
5  600  Desert       NA2  Empty

有点困难,但并非不可能。

重要的是在对column进行排序时创建层次结构 --> index以根据值是否为 NA 创建每列的累积和。 基本上您不希望在操作之前计算 Volume NA 值。

s = df.stack(dropna=False).reset_index()

s['level_1'] = pd.Categorical(s['level_1'],categories=df.columns.tolist())

s1 = s.sort_values(by=['level_1','level_0']).set_index(['level_0','level_1']
                 ).isna().cumsum().unstack(1).droplevel(0,1)

df = df.fillna('NA_' + s1.astype(str))

    ID   Theme Operation Volume
0  100  Jungle        S3   Full
1  200  Desert        S3   Full
2  302  Cavern        S1  Empty
3  303   Swamp      NA_1   Full
4  400  Jungle        S3   NA_3
5  600  Desert      NA_2  Empty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM