python - Pandas Dataframe 用其他列的第一个值填充列

标签 python pandas replace

我有一个像这样的 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

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

最佳答案

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

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
​

关于python - Pandas Dataframe 用其他列的第一个值填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948103/

相关文章:

python - 了解 `not` 运算符的优先级

python - 难以理解 Python 中的嵌套函数

python - 将一个系列分配给数据帧的所有列(按列)?

javascript - 正则表达式替换 & 但不替换 < 和 >

javascript - 在javascript中替换字符串中的多个字符

regex - 用正则表达式交换字母

python - Python3 中德语元音变音的编码/解码

python - Dulwich ~ 推送到某个分支

python - 如何使用过滤器获取python数据框列名

pandas - Python folium GeoJSON map 不显示