我没有找到一种方法来组织下面的数据在潘达斯显示所有我需要的信息。我有以下数据:
Fecha ID Nombre Doc Doc2 Prod Cantidad
0 2021-03-06 00:00:00 1 Lolo 123 1 1564 1
1 2021-03-06 00:00:00 1 Lolo 123 1 15665 1
2 2021-03-06 00:00:00 1 Lolo 123 1 1674 1
3 2021-03-06 00:00:00 2 Momo 125 1 1568 1
4 2021-03-06 00:00:00 2 Momo 125 1 1568 1
5 2021-03-06 00:00:00 3 PePe 136 2 1568 1
6 2021-03-06 00:00:00 3 PePe 136 2 1678 1
7 2021-03-06 00:00:00 4 Lolo 123 1 1674 1
8 2021-03-06 00:00:00 5 Coco 125 2 1568 1
9 2021-03-07 00:00:00 6 Lolo 123 1 15665 1现在,我需要为每个人添加相同日期的Cantidad of`` Prod,例如Lolo,她在同一天有0、1、2和4行。我找到这样做的方式是在连接theDate+Doc+`Doc2` (所有字符串)之后使用groupby,这是我找到的按不同日期对同一个人进行分组和分离的唯一方法。守则如下:
df['Concat'] = df['Doc'] + df['Doc2'] + df['Fecha'].str[:-9].str.replace('-','')
gb = df.groupby(['Concat', 'Fecha', 'Nombre', 'Doc', 'Doc2', 'Prod'],
as_index=False)[['Cantidad']].sum()我得到了这个结果:
Concat Fecha Nombre Doc Doc2 Prod Cantidad
0 123120210306 2021-03-06 00:00:00 Lolo 123 1 1564 1
1 123120210306 2021-03-06 00:00:00 Lolo 123 1 1674 2
2 123120210306 2021-03-06 00:00:00 Lolo 123 1 15665 1
3 123120210307 2021-03-07 00:00:00 Lolo 123 1 15665 1
4 125120210306 2021-03-06 00:00:00 Momo 125 1 1568 2
5 125220210306 2021-03-06 00:00:00 Coco 125 2 1568 1
6 136220210306 2021-03-06 00:00:00 PePe 136 2 1568 1
7 136220210306 2021-03-06 00:00:00 PePe 136 2 1678 1分组是正确的,问题是当我想要将‘ID’放在dataframe中并选择日期的最小ID时,在本例中,“Lolo”的ID是1(在示例中它有1和4)。
每次我把ID放在groupby中,它就不再按数量对我分组。
有人能指导我如何找到解决方案吗?结果应该是这样:
Concat Fecha ID Nombre Doc Doc2 Prod Cantidad
0 123120210306 2021-03-06 00:00:00 1 Lolo 123 1 1564 1
1 123120210306 2021-03-06 00:00:00 1 Lolo 123 1 1674 2
2 123120210306 2021-03-06 00:00:00 1 Lolo 123 1 15665 1
3 123120210307 2021-03-07 00:00:00 6 Lolo 123 1 15665 1
4 125120210306 2021-03-06 00:00:00 2 Momo 125 1 1568 2
5 125220210306 2021-03-06 00:00:00 5 Coco 125 2 1568 1
6 136220210306 2021-03-06 00:00:00 3 PePe 136 2 1568 1
7 136220210306 2021-03-06 00:00:00 3 PePe 136 2 1678 1谢谢。
发布于 2021-07-15 22:57:45
看起来您需要每个日期的最小ID,我想您会想要对该日期的每个实例使用这个最小ID。如果是这样的话,那么做一个单独的组来获取数据,然后合并到日期。参见这个玩具示例:
df = pd.DataFrame({'date': ["2021-03-06", "2021-03-06", "2021-03-07", "2021-03-07"], 'ID': [1, 2, 3, 4]})
df_min_id = df.groupby('date', as_index=False)['ID'].min()
# you may want to rename the ID column to flag that it is the min
df_min_id = df_min_id.rename(columns={'ID': 'min_ID'})
df = df.merge(df_min_id, on='date', how='left')
# in your case, I think you want:
gb = gb.merge(df_min_id, on='date', how='left')
print(df)
# date ID min_ID
# 0 2021-03-06 1 1
# 1 2021-03-06 2 1
# 2 2021-03-07 3 3
# 3 2021-03-07 4 3https://stackoverflow.com/questions/68401220
复制相似问题