DataFrame 按行拆分并使用 Python Pandas 在 header 一列上应用
DataFrame Split On Rows and apply on header one column using Python Pandas
我正在做一些项目,想出了一个混乱的情况,我必须根据数据框的第一列拆分数据框,所以情况就是我的数据框我来自 SQL 查询,我对此做了很多操作。这就是为什么不在这里发布代码的原因。
目标: 我的数据框就像下面的截图,它可用an xlsx file.
输出: 我正在寻找类似附件的输出:
问题是我无法在此处放置任何逻辑,因为我是 Python.
中的新手,因此我如何在数据框本身上完成此操作
将 Excel 文件加载到 Pandas 数据框中,然后根据条件提取行。
dframe = pandas.read_excel("sample.xlsx")
dframe = dframe.loc[dframe["Placement# Name"] == "Needed value"]
其中 "needed value" 是其中一行的值。
我认为你可以这样做:
df = df.set_index('Placement# Name')
df['Date'] = df['Date'].dt.strftime('%M-%d-%Y')
df_sub = df[['Delivered Impressions','Clicks','Conversion','Spend']].sum(level=0)\
.assign(Date='Subtotal')
df_sub['CTR'] = df_sub['Clicks'] / df_sub['Delivered Impressions']
df_sub['eCPA'] = df_sub['Spend'] / df_sub['Conversion']
df_out = pd.concat([df, df_sub]).set_index('Date',append=True).sort_index(level=0)
startline = 0
writer = pd.ExcelWriter('testxls.xlsx', engine='openpyxl')
for n,g in df_out.groupby(level=0):
g.to_excel(writer, startrow=startline, index=True)
startline += len(g)+2
writer.save()
我正在做一些项目,想出了一个混乱的情况,我必须根据数据框的第一列拆分数据框,所以情况就是我的数据框我来自 SQL 查询,我对此做了很多操作。这就是为什么不在这里发布代码的原因。
目标: 我的数据框就像下面的截图,它可用an xlsx file.
输出: 我正在寻找类似附件的输出:
问题是我无法在此处放置任何逻辑,因为我是 Python.
中的新手,因此我如何在数据框本身上完成此操作将 Excel 文件加载到 Pandas 数据框中,然后根据条件提取行。
dframe = pandas.read_excel("sample.xlsx")
dframe = dframe.loc[dframe["Placement# Name"] == "Needed value"]
其中 "needed value" 是其中一行的值。
我认为你可以这样做:
df = df.set_index('Placement# Name')
df['Date'] = df['Date'].dt.strftime('%M-%d-%Y')
df_sub = df[['Delivered Impressions','Clicks','Conversion','Spend']].sum(level=0)\
.assign(Date='Subtotal')
df_sub['CTR'] = df_sub['Clicks'] / df_sub['Delivered Impressions']
df_sub['eCPA'] = df_sub['Spend'] / df_sub['Conversion']
df_out = pd.concat([df, df_sub]).set_index('Date',append=True).sort_index(level=0)
startline = 0
writer = pd.ExcelWriter('testxls.xlsx', engine='openpyxl')
for n,g in df_out.groupby(level=0):
g.to_excel(writer, startrow=startline, index=True)
startline += len(g)+2
writer.save()