提问人:ah bon 提问时间:11/15/2023 更新时间:11/15/2023 访问量:33
按一列分组,如果日期列相同,则在数值列中填写缺失值
Groupby one column, if the date column are the same, fill in the missing values in the numerical column
问:
假设数据帧如下:df
date actual_value fitted_value predicted_value code
0 2023/8/31 NaN NaN 520.994413 LX0301
1 2023/9/30 NaN NaN 580.967973 LX0301
2 2023/10/31 NaN NaN 650.392867 LX0301
3 2023/8/31 471.459992 520.027310 NaN LX0301
4 2023/9/30 NaN NaN 531.199547 LX0301
5 2023/10/31 NaN NaN 600.053484 LX0301
6 2023/8/31 471.459992 511.902229 NaN LX0301
7 2023/9/30 480.400211 518.202630 NaN LX0301
8 2023/10/31 NaN NaN 537.890792 LX0301
9 2023/8/31 NaN NaN 99.216818 LX0101
10 2023/9/30 NaN NaN 98.624779 LX0101
11 2023/10/31 NaN NaN 98.690596 LX0101
12 2023/8/31 99.400000 99.221767 NaN LX0101
13 2023/9/30 NaN NaN 98.822977 LX0101
14 2023/10/31 NaN NaN 98.875062 LX0101
15 2023/8/31 99.400000 99.220693 NaN LX0101
16 2023/9/30 98.700000 98.802146 NaN LX0101
17 2023/10/31 NaN NaN 98.738091 LX0101
对于每组(在此示例中,有 和 ),如果 的值相同,我需要用该日期存在的值填充 NaN。举个例子,我们看到 in 行 、 和 和 是缺失值,但它们出现在行 (或 ) 和 中,因此我们需要使用行 (或 ) 中现有的实际值来填充行 和 。注意:对于本示例中的每组数据,同一日期的实际值是相同的(例如,行和、行和中的实际值相同)。如何实现这一点?谢谢。code
LX0301
LX0101
date
actual_value
actual_value
LX0301
actual_value
0
1
4
2023/8/31
2023/9/30
6
3
7
6
3
7
0
1
4
3
6
12
15
所需结果如下:
date actual_value fitted_value predicted_value code
0 2023/8/31 471.459992 NaN 520.994413 LX0301
1 2023/9/30 480.400211 NaN 580.967973 LX0301
2 2023/10/31 NaN NaN 650.392867 LX0301
3 2023/8/31 471.459992 520.027310 NaN LX0301
4 2023/9/30 480.400211 NaN 531.199547 LX0301
5 2023/10/31 NaN NaN 600.053484 LX0301
6 2023/8/31 471.459992 511.902229 NaN LX0301
7 2023/9/30 480.400211 518.202630 NaN LX0301
8 2023/10/31 NaN NaN 537.890792 LX0301
9 2023/8/31 99.400000 NaN 99.216818 LX0101
10 2023/9/30 98.700000 NaN 98.624779 LX0101
11 2023/10/31 NaN NaN 98.690596 LX0101
12 2023/8/31 99.400000 99.221767 NaN LX0101
13 2023/9/30 98.700000 NaN 98.822977 LX0101
14 2023/10/31 NaN NaN 98.875062 LX0101
15 2023/8/31 99.400000 99.220693 NaN LX0101
16 2023/9/30 98.700000 98.802146 NaN LX0101
17 2023/10/31 NaN NaN 98.738091 LX0101
答:
1赞
ah bon
11/15/2023
#1
下面的代码似乎有效。欢迎您指出问题或分享其他解决方案:
# Convert the 'date' column to datetime type
df['date'] = pd.to_datetime(df['date'])
# Group by 'code' and 'date', and fill missing values in 'actual_value' column
df['actual_value'] = df.groupby(['code', 'date'])['actual_value'].transform(lambda x: x.fillna(x.dropna().max()))
print(df)
外:
date actual_value fitted_value predicted_value code
0 2023-08-31 471.459992 NaN 520.994413 LX0301
1 2023-09-30 480.400211 NaN 580.967973 LX0301
2 2023-10-31 NaN NaN 650.392867 LX0301
3 2023-08-31 471.459992 520.027310 NaN LX0301
4 2023-09-30 480.400211 NaN 531.199547 LX0301
5 2023-10-31 NaN NaN 600.053484 LX0301
6 2023-08-31 471.459992 511.902229 NaN LX0301
7 2023-09-30 480.400211 518.202630 NaN LX0301
8 2023-10-31 NaN NaN 537.890792 LX0301
9 2023-08-31 99.400000 NaN 99.216818 LX0101
10 2023-09-30 98.700000 NaN 98.624779 LX0101
11 2023-10-31 NaN NaN 98.690596 LX0101
12 2023-08-31 99.400000 99.221767 NaN LX0101
13 2023-09-30 98.700000 NaN 98.822977 LX0101
14 2023-10-31 NaN NaN 98.875062 LX0101
15 2023-08-31 99.400000 99.220693 NaN LX0101
16 2023-09-30 98.700000 98.802146 NaN LX0101
17 2023-10-31 NaN NaN 98.738091 LX0101
评论
1赞
Scott Boston
11/15/2023
感谢您的编辑。我是你解决方案的原始+1。感谢您的贡献和快乐的编码!
3赞
Scott Boston
11/15/2023
#2
尝试:
df['actual_value_new'] = df.groupby(['code','date'])['actual_value'].transform('first')
输出(仅用于显示旧列和新列):actual_value_new
date actual_value fitted_value predicted_value code actual_value_new
0 2023/8/31 NaN NaN 520.994413 LX0301 471.459992
1 2023/9/30 NaN NaN 580.967973 LX0301 480.400211
2 2023/10/31 NaN NaN 650.392867 LX0301 NaN
3 2023/8/31 471.459992 520.027310 NaN LX0301 471.459992
4 2023/9/30 NaN NaN 531.199547 LX0301 480.400211
5 2023/10/31 NaN NaN 600.053484 LX0301 NaN
6 2023/8/31 471.459992 511.902229 NaN LX0301 471.459992
7 2023/9/30 480.400211 518.202630 NaN LX0301 480.400211
8 2023/10/31 NaN NaN 537.890792 LX0301 NaN
9 2023/8/31 NaN NaN 99.216818 LX0101 99.400000
10 2023/9/30 NaN NaN 98.624779 LX0101 98.700000
11 2023/10/31 NaN NaN 98.690596 LX0101 NaN
12 2023/8/31 99.400000 99.221767 NaN LX0101 99.400000
13 2023/9/30 NaN NaN 98.822977 LX0101 98.700000
14 2023/10/31 NaN NaN 98.875062 LX0101 NaN
15 2023/8/31 99.400000 99.220693 NaN LX0101 99.400000
16 2023/9/30 98.700000 98.802146 NaN LX0101 98.700000
17 2023/10/31 NaN NaN 98.738091 LX0101 NaN
评论