首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫分类与分类

熊猫分类与分类
EN

Stack Overflow用户
提问于 2021-07-15 22:00:05
回答 1查看 30关注 0票数 0

我没有找到一种方法来组织下面的数据在潘达斯显示所有我需要的信息。我有以下数据:

代码语言:javascript
复制
    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,这是我找到的按不同日期对同一个人进行分组和分离的唯一方法。守则如下:

代码语言:javascript
复制
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()

我得到了这个结果:

代码语言:javascript
复制
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中,它就不再按数量对我分组。

有人能指导我如何找到解决方案吗?结果应该是这样:

代码语言:javascript
复制
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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 22:57:45

看起来您需要每个日期的最小ID,我想您会想要对该日期的每个实例使用这个最小ID。如果是这样的话,那么做一个单独的组来获取数据,然后合并到日期。参见这个玩具示例:

代码语言:javascript
复制
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       3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68401220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档