gpt4 book ai didi

python - 迭代数据帧,将值附加到字典中,直到值为 NaN,然后​​启动新的字典条目

转载 作者:行者123 更新时间:2023-12-02 01:27:57 24 4
gpt4 key购买 nike

所以我有一个包含三列的数据框,第一列有一个值“x”,它在一个循环中不断上下变化,如 [1, 2, 3, 4, 5, 4, 3, 2, 1, 2 ,3,……]。第二个是“时间”栏。第三个是“测量”,对于大多数行来说,这是一些 float ,但在循环开始和结束附近,在某些情况下它会变成 NaN,但就“x”而言并不总是在同一行上。数据的示例如下所示:(抱歉代码太长,我认为有一个示例很容易)

df = pd.DataFrame([[1, 'time1', ], [2, 'time2', ], [3, 'time3', 3], [4, 'time4', 5], [5, 'time5', 4], [6, 'time6', ], [5, 'time7', ], [4, 'time8', 3], [3, 'time9', 2], [2, 'time10', ], [1, 'time11', ], [2, 'time12', 4], [3, 'time13', 5], [4, 'time14', 6], [5, 'time15', 3], [6, 'time16', ], [5, 'time17', ], [4, 'time18', 3], [3, 'time19', 3]], columns=['x', 'time', 'measurement'])

我想迭代这个数据帧并创建一个新的字典,使得键是“time”列中的第一个值,其中“measurement”不是 NaN,并且作为其值的两个列表“x ”值和相应的“测量”值。然后,每次遇到 NaN 作为“测量”时,都会从“测量”不再是 NaN 的下一行开始一个新的字典实例。对于我的示例数据,最终结果将如下所示:

nice_dict = {'time3':([3, 4, 5],[3, 5, 4]), 'time8':([4, 3],[3, 2]), 'time12':([2, 3, 4, 5],[4, 5, 6, 3]) .......}

谁能帮我解决这个问题吗?

最佳答案

您可以使用 groupby对连续非 NA 值组的操作:

# identify non-NA rows
m = df['measurement'].notna()

# keep only non-NA and group by successive
# then extract the key and values to form the dictionary
nice_dict = {g['time'].iloc[0]: tuple(g[['x', 'measurement']]
.T.convert_dtypes()
.values.tolist())
for _, g in df[m].groupby((~m).cumsum())}

输出:

{'time3': ([3, 4, 5], [3, 5, 4]),
'time8': ([4, 3], [3, 2]),
'time12': ([2, 3, 4, 5], [4, 5, 6, 3]),
'time18': ([4, 3], [3, 3])}

关于python - 迭代数据帧,将值附加到字典中,直到值为 NaN,然后​​启动新的字典条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73999098/

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