Python 3.x 如何获得每组中的最高值?
我刚接触熊猫,我有一个类似这样的数据集Python 3.x 如何获得每组中的最高值?,python-3.x,pandas,dataframe,pandas-groupby,Python 3.x,Pandas,Dataframe,Pandas Groupby,我刚接触熊猫,我有一个类似这样的数据集 s_name Time p_name qty A 12/01/2019 ABC 1 A 12/01/2019 ABC 1 A 12/01/2019 DEF 2 A 12/01/2019 DEF 2 A 12/01/2019 FGH 0 B 13/02/2019 ABC 3 B 13/02/2019
s_name Time p_name qty
A 12/01/2019 ABC 1
A 12/01/2019 ABC 1
A 12/01/2019 DEF 2
A 12/01/2019 DEF 2
A 12/01/2019 FGH 0
B 13/02/2019 ABC 3
B 13/02/2019 DEF 1
B 13/02/2019 DEF 1
B 13/03/2019 ABC 3
B 13/03/2019 FGH 0
我尝试按s_名称分组,并查找每个唯一p_名称在一个月内的数量总和,但仅显示p_名称和前两个最大数量。下面是我希望最终输出的示例
s_name Time p_name qty
A 01 DEF 4
A 01 ABC 2
B 02 ABC 3
B 02 DEF 2
B 03 ABC 2
B 03 FGH 0
你有什么想法吗?我被困在这里已经很长时间了,非常感谢您的帮助。我自己对熊猫还不熟悉。我将尝试回答你的问题 请参阅此代码
from io import StringIO
import pandas as pd
columns = "s_name Time p_name qty"
# Create dataframe from text.
df = pd.read_csv(
StringIO(
f"""{columns}
A 12/01/2019 ABC 1
A 12/01/2019 ABC 1
A 12/01/2019 DEF 2
A 12/01/2019 DEF 2
A 12/01/2019 FGH 0
B 13/02/2019 ABC 3
B 13/02/2019 DEF 1
B 13/02/2019 DEF 1
B 13/03/2019 ABC 3
B 13/03/2019 FGH 0"""
),
sep=" ",
)
S_NAME, TIME, P_NAME, QTY = columns.split()
MONTH = "month"
# Convert the TIME col to datetime types.
df.Time = pd.to_datetime(df.Time, dayfirst=True)
# Create a month column with zfilled strings.
df[MONTH] = df.Time.apply(lambda x: str(x.month).zfill(2))
# Group
group = df.groupby(by=[S_NAME, P_NAME, MONTH])
gdf = (
group.sum()
.sort_index()
.sort_values(by=[S_NAME, MONTH, QTY], ascending=False)
.reset_index()
)
gdf.groupby([S_NAME, MONTH]).head(2).sort_values(by=[S_NAME, MONTH]).reset_index()
这是你期望的结果吗
我对熊猫是个新手。我将尝试回答你的问题 请参阅此代码
from io import StringIO
import pandas as pd
columns = "s_name Time p_name qty"
# Create dataframe from text.
df = pd.read_csv(
StringIO(
f"""{columns}
A 12/01/2019 ABC 1
A 12/01/2019 ABC 1
A 12/01/2019 DEF 2
A 12/01/2019 DEF 2
A 12/01/2019 FGH 0
B 13/02/2019 ABC 3
B 13/02/2019 DEF 1
B 13/02/2019 DEF 1
B 13/03/2019 ABC 3
B 13/03/2019 FGH 0"""
),
sep=" ",
)
S_NAME, TIME, P_NAME, QTY = columns.split()
MONTH = "month"
# Convert the TIME col to datetime types.
df.Time = pd.to_datetime(df.Time, dayfirst=True)
# Create a month column with zfilled strings.
df[MONTH] = df.Time.apply(lambda x: str(x.month).zfill(2))
# Group
group = df.groupby(by=[S_NAME, P_NAME, MONTH])
gdf = (
group.sum()
.sort_index()
.sort_values(by=[S_NAME, MONTH, QTY], ascending=False)
.reset_index()
)
gdf.groupby([S_NAME, MONTH]).head(2).sort_values(by=[S_NAME, MONTH]).reset_index()
这是你期望的结果吗
使用创建一个
月
,然后按s_name
和月
分组,然后将一个函数添加到组中,按名称
分组,对数量
进行一次求和
,降序,只得到前两行:
使用创建一个
月
,然后按s_name
和月
分组,然后向组添加一个函数,按名称
分组,并对数量
进行一次求和
,降序,只得到前两行:
你能提供文本而不是图像吗?@SandeepKadapa我已经编辑过了。抱歉,我的帖子不多。你能提供文本而不是图片吗?@SandeepKadapa我已经编辑过了。对不起,我没有贴太多。