【问题标题】:Pandas Dataframe fill column with first value of other columnsPandas Dataframe 用其他列的第一个值填充列
【发布时间】:2019-09-16 05:27:48
【问题描述】:

我有一个这样的 df:

   Group  Col1  Col2  Col3
0      A   NaN   NaN   NaN
1      A    11   NaN   NaN
2      A    11    52     3
3      A    11    52     3
4      B   NaN   NaN   NaN
5      B   NaN   NaN    18
6      B   NaN     2    18
7      B    20     2    18
8      B    20     2    18
9      C   NaN   NaN   NaN
10     C   NaN   NaN   NaN
11     C   NaN   202   NaN
12     C   NaN   202   NaN
13     C   NaN   202     6
14     C   NaN   202     6

我想同时基于“组”列以及列 Col1、Col2 和 Col3 的第一个值构造“值”列。所需的 df 是这样的:

   Group  Col1  Col2  Col3  Value
0      A   NaN   NaN   NaN    NaN
1      A    11   NaN   NaN     11  # first value in Col1
2      A    11    52     3     11
3      A    11    52     3     11
4      B   NaN   NaN   NaN    NaN
5      B   NaN   NaN    18     18  # first value in Col3
6      B   NaN     2    18     18
7      B    20     2    18     18
8      B    20     2    18     18
9      C   NaN   NaN   NaN    NaN
10     C   NaN   NaN   NaN    NaN
11     C   NaN   202   NaN    202  # first value in Col2
12     C   NaN   202   NaN    202
13     C   NaN   202     6    202
14     C   NaN   202     6    202

任何帮助将不胜感激!非常感谢!

【问题讨论】:

    标签: python pandas replace


    【解决方案1】:

    这是一种使用ffill 并在每个组中获取first 有效值的方法:

    s = slice('Col1','Col3')
    df['Value'] = (df.loc[:,s]
                    .ffill(1)
                    .groupby(df.Group)
                    .transform('first').Col3
                    .where(df.loc[:,s].any(1)))
    

    print(df)
    
        Group  Col1   Col2  Col3  Value
    0      A   NaN    NaN   NaN    NaN
    1      A  11.0    NaN   NaN   11.0
    2      A  11.0   52.0   3.0   11.0
    3      A  11.0   52.0   3.0   11.0
    4      B   NaN    NaN   NaN    NaN
    5      B   NaN    NaN  18.0   18.0
    6      B   NaN    2.0  18.0   18.0
    7      B  20.0    2.0  18.0   18.0
    8      B  20.0    2.0  18.0   18.0
    9      C   NaN    NaN   NaN    NaN
    10     C   NaN    NaN   NaN    NaN
    11     C   NaN  202.0   NaN  202.0
    12     C   NaN  202.0   NaN  202.0
    13     C   NaN  202.0   6.0  202.0
    14     C   NaN  202.0   6.0  202.0
    ​
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多