gpt4 book ai didi

python - 如何处理 Pandas 数据框中丢失的数据?

转载 作者:行者123 更新时间:2023-12-04 14:50:15 26 4
gpt4 key购买 nike

我有一个包含以下信息的 Pandas 数据框:

  • 对于每个时间戳,8 个可用托盘中有多个托盘(介于 1-4 个之间)。 (因此每个时间戳最多有 4 个托盘。)
  • 每个托盘由 4 个位置组成。

数据框可能如下所示:

df = 

timestamp t_idx position error type SNR
0 16229767 5 2 1 T1 123
1 16229767 5 1 0 T1 123
3 16229767 5 3 0 T1 123
4 16229767 5 4 0 T1 123
5 16229767 3 3 1 T9 38
6 16229767 3 1 0 T9 38
7 16229767 3 4 0 T9 38
8 29767162 7 1 0 T4 991
9 29767162 7 4 1 T4 991

如果我们查看时间戳“16229767”,会发现有 2 个托盘在使用:托盘 3 和托盘 5。检测到纸盒 5 的每个位置。但是,纸盘 3 缺少数据,因为位置 2 缺失。

我想修复它并以编程方式添加这一行:

 10  16229767       3        2       1       T9      38

11 29767162 7 2 1 T4 991
12 29767162 7 3 1 T4 991

我不确定如何正确处理缺失值。我现在天真的做法是:

timestamps = df['timestamp'].unique()
for ts in timestamps:
tray_ids = df.loc[df['timestamp'] == timestamps ]["Tray ID"].unique()
for t_id in tray_ids:
# For timestamp and tray id: Each position (1 to 4) should exist once!
# df.loc[(df['timestamp'] == ts) & (df['Tray ID'] == t_id)]
# if not, append the position on the tray and set error to 1

现在如何找到缺失的位置并将行添加到我的数据框中?

===

编辑:我正在简化我的示例,但遗漏了相关信息:还有其他列,新生成的行应该具有相同的内容per tray。我通过添加更多列使其更清晰。

还有一个关于错误的问题:对于必须添加的每一行,错误应该自动为1(后面没有逻辑)。

最佳答案

我们可以从将 position 转换为分类类型开始,使用 groupby 填充所有缺失值并设置相应的 error 值到 1
我们还必须用正确的值填充 typeSNR 列,如下所示:

>>> df['position'] = pd.Categorical(df['position'], categories=df['position'].unique())
>>> df_grouped = df.groupby(['timestamp', 't_idx', 'position'], as_index=False).first()
>>> df_grouped['error'] = df_grouped['error'].fillna(1)

>>> df_grouped.sort_values('type', inplace=True)
>>> df_grouped['type'] = df_grouped.groupby(['timestamp','t_idx'])['type'].ffill().bfill()

>>> df_grouped.sort_values('SNR', inplace=True)
>>> df_grouped['SNR'] = df_grouped.groupby(['timestamp','t_idx'])['SNR'].ffill().bfill()

>>> df_grouped = df_grouped.reset_index(drop=True)
timestamp t_idx position error type SNR
0 16229767 3 1 0.0 T9 38.0
1 16229767 3 3 1.0 T9 38.0
2 16229767 3 4 0.0 T9 38.0
3 16229767 5 2 1.0 T1 123.0
4 16229767 5 1 0.0 T1 123.0
5 16229767 5 3 0.0 T1 123.0
6 16229767 5 4 0.0 T1 123.0
7 29767162 7 1 0.0 T4 991.0
8 29767162 7 4 1.0 T4 991.0
9 16229767 3 2 1.0 T9 38.0
10 16229767 7 2 1.0 T4 991.0
11 16229767 7 1 1.0 T4 991.0
12 16229767 7 3 1.0 T4 991.0
13 16229767 7 4 1.0 T4 991.0
14 29767162 3 2 1.0 T4 991.0
15 29767162 3 1 1.0 T4 991.0
16 29767162 3 3 1.0 T4 991.0
17 29767162 3 4 1.0 T4 991.0
18 29767162 5 2 1.0 T4 991.0
19 29767162 5 1 1.0 T4 991.0
20 29767162 5 3 1.0 T4 991.0
21 29767162 5 4 1.0 T4 991.0
22 29767162 7 2 1.0 T4 991.0
23 29767162 7 3 1.0 T4 991.0

然后,我们过滤来自原始 DataFrame 的值以获得预期的结果:

>>> df_grouped[
... pd.Series(
... list(zip(df_grouped['timestamp'].values, df_grouped['t_idx'].values))
... ).isin(list(zip(df['timestamp'].values, df['t_idx'].values)))
... ].sort_values(by=['timestamp', 't_idx']).reset_index(drop=True)
timestamp t_idx position error type SNR
0 16229767 3 1 0.0 T9 38.0
1 16229767 3 3 1.0 T9 38.0
2 16229767 3 4 0.0 T9 38.0
3 16229767 3 2 1.0 T9 38.0
4 16229767 5 2 1.0 T1 123.0
5 16229767 5 1 0.0 T1 123.0
6 16229767 5 3 0.0 T1 123.0
7 16229767 5 4 0.0 T1 123.0
8 29767162 7 1 0.0 T4 991.0
9 29767162 7 4 1.0 T4 991.0
10 29767162 7 2 1.0 T4 991.0
11 29767162 7 3 1.0 T4 991.0

关于python - 如何处理 Pandas 数据框中丢失的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69188573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com