python - 用同一数据帧中的值填充 NaN 信息

标签 python pandas

我想知道有没有更快的方法来解决这个问题而不使用for循环?

输入数据框如下所示:

    0    1    2    3    4    5    6   
0   x    x    1   NaN  NaN  NaN  NaN
1   x    y    1   NaN  NaN  NaN  NaN
2   y    y    4    4    4    4    4
3   y    z    5    2    7    4    0  
4   x    x   NaN   5    7    4    9
5   x    y   NaN   9    4    5    10

我希望输出如下所示:

    0    1    2    3    4    5    6   
0   x    x    1    5    7    4    9
1   x    y    1    9    4    5    10
2   y    y    4    4    4    4    4
3   y    z    5    2    7    4    0  

col0col1 是一些信息。如果我们将它们作为一个信息,这两列将不会有 NaN,并且是唯一的。

这个数据框可能非常大,而且我不知道数据丢失在哪里。

最佳答案

如果每个组需要第一个非 NaN 值,请使用 GroupBy.first :

df1 = df.groupby([0,1], as_index=False).first()
print (df1)
   0  1    2    3    4    5     6
0  x  x  1.0  5.0  7.0  4.0   9.0
1  x  y  1.0  9.0  4.0  5.0  10.0
2  y  y  4.0  4.0  4.0  4.0   4.0
3  y  z  5.0  2.0  7.0  4.0   0.0

print (df)
   0  1     2     3     4    5     6
0  x  x  10.0   NaN   NaN  NaN   NaN
1  x  x  20.0   NaN   NaN  NaN   NaN
2  x  x   1.0   NaN   NaN  NaN   NaN
3  x  y   1.0   NaN   NaN  NaN   NaN
4  y  y   4.0   4.0   4.0  4.0   4.0
5  y  z   5.0   2.0   7.0  4.0   0.0
6  x  x   NaN   5.0   7.0  4.0   9.0
7  x  x   NaN  50.0  70.0  4.0   9.0
8  x  y   NaN   9.0   4.0  5.0  10.0

如果每组有更多没有 NaN 的行,则可能会丢失一些数据:

df1 = df.groupby([0,1], as_index=False).first()
print (df1)
   0  1     2    3    4    5     6
0  x  x  10.0  5.0  7.0  4.0   9.0
1  x  y   1.0  9.0  4.0  5.0  10.0
2  y  y   4.0  4.0  4.0  4.0   4.0
3  y  z   5.0  2.0  7.0  4.0   0.0

具有自定义功能的可能解决方案:

def f(x):
    df1 = pd.DataFrame({y: pd.Series(x[y].dropna().values) for y in x})
    return (df1)

df = df.set_index([0,1]).groupby([0,1]).apply(f).reset_index(level=2, drop=True).reset_index()
print (df)
   0  1     2     3     4    5     6
0  x  x  10.0   5.0   7.0  4.0   9.0
1  x  x  20.0  50.0  70.0  4.0   9.0
2  x  x   1.0   NaN   NaN  NaN   NaN
3  x  y   1.0   9.0   4.0  5.0  10.0
4  y  y   4.0   4.0   4.0  4.0   4.0
5  y  z   5.0   2.0   7.0  4.0   0.0

关于python - 用同一数据帧中的值填充 NaN 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594621/

相关文章:

Python - google-cloud 库 - Google Cloud Shell 中出现错误

python - Pandas Groupby 列的最后 N 行的最小值和最大值

python按列拆分pd数据框

python - 在 Pandas 系列中拆分字符串和整数 - Python

python - 如何在不启动 Jupyter Notebook 服务器的情况下使用 .ipynb 文件?

python - 在不使用表单的情况下使用 flask wtforms 验证器

python - 导入错误: No module named manage Django

python - 使用 Pandas DataFrame 计算百分比

python - Pandas 用部分通配符读取csv文件

python - 如何从 Dataframe 对象字段中提取日期值