如何在同一python代码中使用内部联接和groupby
我从excel文件Sheet1和Sheet2中获得以下输入 表1: 订单ID |订单日期|细分|销售 10011-11-2016消费者100 10011-11-2016消费者200 2001-16-06-2016消费者300 第2张: 返回|订单ID 是1001 我在python中使用下面的代码,其中我使用内部连接和groupby只从两个工作表中获取匹配的记录 作为pd进口熊猫 Sheet1=pd.read\u excel rC:\Users\Bharath Shana\Desktop\Python\sample data.xlsx,sheet\u name='Sheet1' Sheet2=pd.read\u excel rC:\Users\Bharath Shana\Desktop\Python\sample data.xlsx,sheet\u name='Sheet2' 订单年=pd.DatetimeIndexSheet1[“订单日期”].Year Sheet1.mergeSheet2,on='Order ID',how='inner' 表1.groupby['Order ID',Order_Year','Segment']['Sales'].合计 输出: 正如您在上面的输出中看到的,它不是显示匹配的记录,而是显示所有记录,我希望输出如下 所需输出: 有人能帮我修改上面的python代码以获得所需的输出吗 问候, 维卡斯让我们试试这个如何在同一python代码中使用内部联接和groupby,python,pandas,pandas-groupby,python-3.7,Python,Pandas,Pandas Groupby,Python 3.7,我从excel文件Sheet1和Sheet2中获得以下输入 表1: 订单ID |订单日期|细分|销售 10011-11-2016消费者100 10011-11-2016消费者200 2001-16-06-2016消费者300 第2张: 返回|订单ID 是1001 我在python中使用下面的代码,其中我使用内部连接和groupby只从两个工作表中获取匹配的记录 作为pd进口熊猫 Sheet1=pd.read\u excel rC:\Users\Bharath Shana\Desktop\Pyth
print(
sheet1[sheet1['Order ID'].isin(sheet2['Order ID'])]
.assign(Year=pd.to_datetime(sheet1['Order Date']).dt.year)
.groupby(['Order ID', 'Segment', 'Year'])['Sales'].sum()
.reset_index(name="Sales_Sum")
)
让我们试试这个
print(
sheet1[sheet1['Order ID'].isin(sheet2['Order ID'])]
.assign(Year=pd.to_datetime(sheet1['Order Date']).dt.year)
.groupby(['Order ID', 'Segment', 'Year'])['Sales'].sum()
.reset_index(name="Sales_Sum")
)
在您的问题中,您将groupby应用于Sheet1,而不是连接的数据帧
s1 = '''Order ID Order Date Segment Sales
1001 11-11-2016 Consumer 100
1001 11-11-2016 Consumer 200
2001 16-06-2016 Consumer 300'''
s2 = '''Returned Order ID
Yes 1001'''
s1 = [[t.strip() for t in re.split(" ", l) if t!=""] for l in s1.split("\n") ]
s2 = [[t.strip() for t in re.split(" ", l) if t!=""] for l in s2.split("\n") ]
Sheet1 = pd.DataFrame(s1[1:], columns=s1[0])
Sheet1["Year"] = pd.DatetimeIndex(Sheet1['Order Date']).year
Sheet1["Sales"] = pd.to_numeric(Sheet1["Sales"])
Sheet2 = pd.DataFrame(s2[1:], columns=s2[0])
Sheet1.merge(Sheet2, on='Order ID', how='inner')\
.groupby(['Order ID','Year', 'Segment']).agg(Sales_sum=("Sales", np.sum)).reset_index()
输出
在您的问题中,您将groupby应用于Sheet1,而不是连接的数据帧
s1 = '''Order ID Order Date Segment Sales
1001 11-11-2016 Consumer 100
1001 11-11-2016 Consumer 200
2001 16-06-2016 Consumer 300'''
s2 = '''Returned Order ID
Yes 1001'''
s1 = [[t.strip() for t in re.split(" ", l) if t!=""] for l in s1.split("\n") ]
s2 = [[t.strip() for t in re.split(" ", l) if t!=""] for l in s2.split("\n") ]
Sheet1 = pd.DataFrame(s1[1:], columns=s1[0])
Sheet1["Year"] = pd.DatetimeIndex(Sheet1['Order Date']).year
Sheet1["Sales"] = pd.to_numeric(Sheet1["Sales"])
Sheet2 = pd.DataFrame(s2[1:], columns=s2[0])
Sheet1.merge(Sheet2, on='Order ID', how='inner')\
.groupby(['Order ID','Year', 'Segment']).agg(Sales_sum=("Sales", np.sum)).reset_index()
输出