pandas 最好是填充panda Dataframe 中缺失的列

6g8kf2rb  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(114)

我正试图找到一种方法,在不消耗太多计算能力的情况下,将缺失值添加到Pandas Dataframe 中。我想达到的目标是。每周应该有所有三种类型的“N,O,D”。如果没有,我们需要填写是,并在修订中添加一个0。例如:2022年10月的第1周没有类型O和D,所以我需要想办法插入两行,下面两张图片显示了什么是输入数据,以及我试图实现的目标。

处理后,数据应如下所示:

下面是我写的代码:

n = df.loc[df["type"] == 'N']
d = df.loc[df["type"] == 'D']
o = df.loc[df["type"] == '0']
df_m=pd.merge(n, d, on=['wmy'], how='outer')
df_m2=pd.merge(df_m , o, on=['wmy'], how='outer')
cols = [col for col in df_m2.columns if 'type' in col]
for i in cols:
   df_m2[i]=df_m2[i].dropna().unique()[0]
df_m2 = df_m2.fillna(0)
n1=df_m2[['wmy','type_x_x','rev_x_x']]
n1.rename(columns = {'type_x_x':'type','rev_x_x':'rev'}, inplace = True )

...
然后连接三个 Dataframe

4nkexdtk

4nkexdtk1#

下面的代码得到了我想要的

result = df.pivot_table(index=['wmy'], columns='type', values='rev', fill_value=0)
6qqygrtg

6qqygrtg2#

尝试再创建一个df并应用do outter join:

df.merge(pd.DataFrame([(k, val) for k,v in {s:['N','O','D'] for s in set(df['wmy'])}.items() for val in v],
         columns=['wmy','type']), how='outer').fillna(0)

相关问题