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