我有一个如下所示的df:
column1 column2 column3 column4
1 2 nan 4
1 2 3 nan
1 2 nan nan
1 2 nan nan
我如何重塑数据框,对于每个带有NaN的单元格,将其删除,并且如果该列具有相同的值,则只取其一个实例?
新df应该看起来像这样;
column1 column2 column3 column4
1 2 3 4
我大约有500列这样的不合格数据。
编辑:
我使用这一行代码将包含斑点数据的值移到一行。
df = df.apply(lambda x: pd.Series(x.dropna().values))
新df如下所示:
column1 column2 column3 column4
1 2 3 4
1 2 nan nan
1 2 nan nan
1 2 nan nan
然后我放下重复项:
df = df.drop_duplicates()
df现在看起来像这样:
column1 column2 column3 column4
1 2 3 4
1 2 nan nan
不知道为什么Nan在这个点之后没有下降,而行却在下降:
pivoted_df = pivoted_df.dropna()
答案 0 :(得分:3)
您可以通过ffill
转发填充缺少的值,删除NaN
的行并删除重复项:
df = df.ffill().dropna().drop_duplicates()
print (df)
column1 column2 column3 column4
1 1 2 3.0 4.0
或者如果需要某些列指定的每个组的第一个非缺失值:
df = df.groupby(['column1','column2'], as_index=False).first()
print (df)
column1 column2 column3 column4
0 1 2 3.0 4.0