如何在 pandas 数据框中插入百分比列?
How do I insert a percentage column in a pandas dataframe?
数据帧:
df = pd.DataFrame([['CategoryA', 400], ['CategoryA', 600],
['CategoryB', 1000], ['CategoryB', 2000]],
columns = ['Category', 'ItemTotal'])
我使用以下内容按类别为总金额创建了一个 groupby:
df = df.groupby('Category')
df = df['ItemTotal'].sum()
df
输出如下所示:
Category
CategoryA 1000
CategoryB 3000
除了每个类别的份额总和之外,我想最终获得另一列,如下所示:
Category
CategoryA 1000 .25
CategoryB 3000 .75
我想知道如何通过将累计美元金额插入新列然后通过除以创建新列来执行此操作。
@jezrael 提供的 link How do I create a new column from the output of pandas groupby().sum()? returns 原始数据框中每一行旁边的每个类别的总和:
df['Total'] = df['ItemTotal'].groupby(df['Category']).transform('sum')
df
输出:
Category ItemTotal Total
0 CategoryA 400 1000
1 CategoryA 600 1000
2 CategoryB 1000 3000
3 CategoryB 2000 3000
但是,我正在寻找每个类别的总和以及 已分组的每个唯一类别 旁边的总数份额,而不是原始数据框中的每一行.
首先需要将 index
转换为列:
df1 = df.groupby('Category', as_index=False)['ItemTotal'].sum()
或者:
df1 = df.groupby('Category')['ItemTotal'].sum().reset_index()
如果需要将Series
转换为一列DataFrame
:
df1 = df.groupby('Category')['ItemTotal'].sum().to_frame()
最后除 sum
列:
df1['Perc'] = df1['ItemTotal'].div(df1['ItemTotal'].sum())
print (df1)
Category ItemTotal Perc
0 CategoryA 1000 0.25
1 CategoryB 3000 0.75
数据帧:
df = pd.DataFrame([['CategoryA', 400], ['CategoryA', 600],
['CategoryB', 1000], ['CategoryB', 2000]],
columns = ['Category', 'ItemTotal'])
我使用以下内容按类别为总金额创建了一个 groupby:
df = df.groupby('Category')
df = df['ItemTotal'].sum()
df
输出如下所示:
Category
CategoryA 1000
CategoryB 3000
除了每个类别的份额总和之外,我想最终获得另一列,如下所示:
Category
CategoryA 1000 .25
CategoryB 3000 .75
我想知道如何通过将累计美元金额插入新列然后通过除以创建新列来执行此操作。
@jezrael 提供的 link How do I create a new column from the output of pandas groupby().sum()? returns 原始数据框中每一行旁边的每个类别的总和:
df['Total'] = df['ItemTotal'].groupby(df['Category']).transform('sum')
df
输出:
Category ItemTotal Total
0 CategoryA 400 1000
1 CategoryA 600 1000
2 CategoryB 1000 3000
3 CategoryB 2000 3000
但是,我正在寻找每个类别的总和以及 已分组的每个唯一类别 旁边的总数份额,而不是原始数据框中的每一行.
首先需要将 index
转换为列:
df1 = df.groupby('Category', as_index=False)['ItemTotal'].sum()
或者:
df1 = df.groupby('Category')['ItemTotal'].sum().reset_index()
如果需要将Series
转换为一列DataFrame
:
df1 = df.groupby('Category')['ItemTotal'].sum().to_frame()
最后除 sum
列:
df1['Perc'] = df1['ItemTotal'].div(df1['ItemTotal'].sum())
print (df1)
Category ItemTotal Perc
0 CategoryA 1000 0.25
1 CategoryB 3000 0.75