提问人:toms 提问时间:8/30/2023 更新时间:8/30/2023 访问量:24
在 pandas 数据帧中使用 for 循环和 .append 向列表添加值
Add values to a list of list with for loop and .append in pandas dataframe
问:
我有一个由 3 列组成的数据帧,它们记录了单个位置的坐标和记录位置的时间:
X Y MonthYear
2945.13 2588.46 Oct2020
2955.13 2523.36 Oct2020
2945.12 2534.36 Oct2020
....
2935.15 2584.37 Nov2020
2945.12 2523.36 Nov2020
....
2912.17 2548.56 Dec2020
....
2912.17 2548.56 Jan2021
...
我想创建一个列表列表,分别包含每个月的坐标 X Y。
这是我的部分代码:
# I create an empty list of list for each month to fill with coordiantes X Y
# list of list: one list for each month within the dataframe
points_months = [[] for _ in range(len(pd.unique(XY_22225['MonthYear'])))]
XY_22225 = XY_22225.reset_index() # make sure indexes pair with number of rows
现在我想使用 for 循环填充这样的列表:
for index, row in XY_22225.iterrows():
current_point = (row['X'], row['Y']) # To combine X Y coordinates
points_months[row['MonthYear']-1].append(current_point) # here I bind each X Y to the corresponding month
但是,出现以下错误消息:IndexError: list index out of range
你可以帮我吗?非常感谢
答:
1赞
mozway
8/30/2023
#1
您可以使用 groupby
和 conversion to_numpy
:
out = (df.groupby('MonthYear', sort=False)[['X', 'Y']]
.apply(lambda g: g.to_numpy().tolist())
)
输出:
MonthYear
Oct2020 [[2945.13, 2588.46], [2955.13, 2523.36], [2945...
Nov2020 [[2935.15, 2584.37], [2945.12, 2523.36]]
Dec2020 [[2912.17, 2548.56]]
Jan2021 [[2912.17, 2548.56]]
或者,对于字典:
out = {year_month: g.to_numpy().tolist() for year_month, g in
df.groupby('MonthYear', sort=False)[['X', 'Y']]}
输出:
{'Oct2020': [[2945.13, 2588.46], [2955.13, 2523.36], [2945.12, 2534.36]],
'Nov2020': [[2935.15, 2584.37], [2945.12, 2523.36]],
'Dec2020': [[2912.17, 2548.56]],
'Jan2021': [[2912.17, 2548.56]]}
上一个:熊猫合并 101
评论
[(x1, y1), (x2, y2), ...]