我在老鼠身上做实验。
我的 df 的一部分如下。
Index Name Time Food Experiment Start
0 Peter 09:00:00 Cheese 2018-08-06 07:30:00
1 Peter 10:00:00 Nut 2018-08-06 07:30:00
2 Peter 11:00:00 Nut 2018-08-06 07:30:00
3 Peter 12:00:00 Cheese 2018-08-06 07:30:00
4 Peter 13:00:00 Nut 2018-08-06 07:30:00
5 Peter 14:00:00 Nut 2018-08-06 07:30:00
6 Peter 15:00:00 Nut 2018-08-06 07:30:00
7 Peter 11:10:00 Nut 2018-08-12 10:30:00
8 Peter 12:10:00 Cheese 2018-08-12 10:30:00
9 Peter 13:10:00 Nut 2018-08-12 10:30:00
我想要一个这样的 df:
Index Name Experiment Start Last Meal in Experiment
0 Peter 2018-08-06 07:30:00 2018-08-06 15:00:00
1 Peter 2018-08-12 10:30:00 2018-08-12 13:10:00
-not enough width-
Count Food Count Nut Count Cheese
7 5 2
3 2 1
要找到“实验中的最后一餐”,很容易。我按“时间”(用餐时间)排序,所以最近的时间总是在最前面。
df = df.sort_values(by='Time', ascending=False)
然后,通过删除所有其他重复的名称和实验开始时间,我只保留那些最晚的时间。
df = df.drop_duplicates(subset=['Name', 'Experiment Start'])
我这样计算最后一顿饭的时间:
df['Last Meal in Experiment'] = df['Experiment Start'].dt.floor('D') + df['Time']
现在我应该有这样的东西(以及时间和食物列):
Index Name Experiment Start Last Meal in Experiment
0 Peter 2018-08-06 07:30:00 2018-08-06 15:00:00
1 Peter 2018-08-12 10:30:00 2018-08-12 13:10:00
但我缺少如何通过 Name 的实验开始时间获得食物数量和奶酪/坚果数量。
在删除重复项之前,我尝试了这样的操作:
df['Count Food'] = df.groupby('Name')['Experiment Start'].transform('count')
但是熊猫有一个错误(新列的格式为 dt),我迷路了。
鸿蒙传说
相关分类