首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫群群结果在多行中的应用

熊猫群群结果在多行中的应用
EN

Stack Overflow用户
提问于 2021-01-15 23:15:13
回答 2查看 57关注 0票数 1

我有一个dataframe df,如下所示:

代码语言:javascript
运行
复制
    PO  SO        Date  Name  Qty
0  123  34  2020-01-05  Carl    5
1  111  55  2020-10-10  Beth    7
2  123  12  2020-02-03  Greg   11
3  101  55  2019-12-03  Carl    3
4  123  34  2020-11-30  Beth   24
5  111  55  2019-04-02  Greg    6
6  202  99  2020-05-06  Beth   19

当按POSO分组时,我想要做的是用数据的最小日期替换日期。例如,有两行PO为'123‘和SO为'34’。由于这些行之间的最小Date是“2020-01-05”,所以这两行的Date列都应该设置为“2020-01-05”。

因此,结果如下所示:

代码语言:javascript
运行
复制
    PO  SO        Date  Name  Qty
0  123  34  2020-01-05  Carl    5
1  111  55  2019-04-02  Beth    7
2  123  12  2020-02-03  Greg   11
3  101  55  2019-12-03  Carl    3
4  123  34  2020-01-05  Beth   24
5  111  55  2019-04-02  Greg    6
6  202  99  2020-05-06  Beth   19
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-15 23:21:19

您可以使用transformgroupby一起创建“计算列”,以避免出现混乱的merge

代码语言:javascript
运行
复制
df = pd.DataFrame({'PO':  [123, 111, 123, 101, 123, 111, 202], 
                  'SO':   [34, 55, 12, 55, 34, 55, 99], 
                  'Date': ['2020-01-05', '2020-10-10', '2020-02-03', '2019-12-03', '2020-11-30', '2019-04-02', '2020-05-06'], 
                  'Name': ['Carl', 'Beth', 'Greg', 'Carl', 'Beth', 'Greg', 'Beth'], 
                  'Qty':  [5, 7, 11, 3, 24, 6, 19]})

df_grouped = df.copy()
df_grouped['Date'] = df_grouped.groupby(['PO', 'SO'])['Date'].transform('min')
df_grouped
Out[1]: 
    PO  SO        Date  Name  Qty
0  123  34  2020-01-05  Carl    5
1  111  55  2019-04-02  Beth    7
2  123  12  2020-02-03  Greg   11
3  101  55  2019-12-03  Carl    3
4  123  34  2020-01-05  Beth   24
5  111  55  2019-04-02  Greg    6
6  202  99  2020-05-06  Beth   19
票数 2
EN

Stack Overflow用户

发布于 2021-01-15 23:15:13

为了实现这一点,我们将使用POSO和每个POSO组合的最小Date创建一个键。我们使用groupbymin来实现这一点。

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'PO':  [123, 111, 123, 101, 123, 111, 202], 
                  'SO':   [34, 55, 12, 55, 34, 55, 99], 
                  'Date': ['2020-01-05', '2020-10-10', '2020-02-03', '2019-12-03', '2020-11-30', '2019-04-02', '2020-05-06'], 
                  'Name': ['Carl', 'Beth', 'Greg', 'Carl', 'Beth', 'Greg', 'Beth'], 
                  'Qty':  [5, 7, 11, 3, 24, 6, 19]})

df_grouped = df[['PO', 'SO', 'Date']].groupby(by=['PO', 'SO'], as_index=False, dropna=False).min()

print(df_grouped)

    PO  SO        Date
0  101  55  2019-12-03
1  111  55  2019-04-02
2  123  12  2020-02-03
3  123  34  2020-01-05
4  202  99  2020-05-06

现在,我们可以将其与原始的dataframe合并,将旧的Date列替换为来自df_groupedDate列。

代码语言:javascript
运行
复制
df = pd.merge(df.drop(columns=['Date']), df_grouped, on=['PO', 'SO']) 

df = df[['PO', 'SO', 'Date', 'Name', 'Qty']] # reset column order

print(df)

    PO  SO        Date  Name  Qty
0  123  34  2020-01-05  Carl    5
1  123  34  2020-01-05  Beth   24
2  111  55  2019-04-02  Beth    7
3  111  55  2019-04-02  Greg    6
4  123  12  2020-02-03  Greg   11
5  101  55  2019-12-03  Carl    3
6  202  99  2020-05-06  Beth   19
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65744765

复制
相关文章

相似问题

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