我的数据如下所示:
date, cardio_time, muscles, muscle_time, stretch_time
2018-01-01, 0, "biceps / lats", 40, 5
2018-01-02, 30, "", 0, 10
2018-01-03, 0, "lats / calf", 41, 6
2018-01-03, 30, "hamstring", 4, 5
2018-01-04, 0, "biceps / lats", 42, 8
我想合并这些具有相同日期的行,并保存两行的信息。转换后我的数据将如下所示,请注意 1 月 3 日已更改:
2018-01-01, 0, "biceps / lats", 40, 5
2018-01-02, 30, "", 0, 10
2018-01-03, 30, "lats / calf / hamstring", 45, 11
2018-01-04, 0, "biceps / lats", 42, 8
我想我可以使用一个 for 循环来检查第 i 行的日期是否与第 i-1 行的日期相同,如果不是,请检查下一行,但如果这些行确实具有相同的日期,则合并这些行一起做这样的事情:
# set default value to 1 exercise per row
df['nr_excercises'] = 1
# for loop
for i in range(1, T):
if df.index[i] == df.index[i-1]:
# set nr of nr_excercises to 2
df.iloc[i, nr_excercises] = 2
# create temp variables that hold info from both rows
cardiotimetot = df[i, cardio_time] + df[i-1, cardio_time]
stretchtimetot = df[i, stretch_time] + df[i-1, stretch_time]
etc...
# save temp variables to i
df.iloc[i, cardio_time] = cardiotimetot
# drop row i-1
df = df.drop[df.index[i-1]] # I think this is correct
问题:这是一个好方法吗?有更好的方法吗?
也许,如果我首先使用 .groupby(df.index).size() 来找出哪些日子有多个条目,然后只将 for 循环应用于 df 的这个子集,那么代码可能会更快。