Pandas 基于条件和总和列的数据透视 Table 计数
Pandas Pivot Table counting based on condition and sum columns
我有 DateFrame,如下所示。
我需要向 dft(数据透视输出)添加几列。第一个计算每天销售的产品总和,它类似于 margine,但仅用于 sum 列而不是 len。我试过
dft['Fruit Total']=df.iloc[:,0:3].sum(axis=1) 但它没有用。
我还想为列总和中的每一行添加列计数值 > 2。如图所示
df = pd.DataFrame({
'date': ["22.10.2021", "22.10.2021", "22.10.2021", "23.10.2021", "23.10.2021", "25.10.2021", "22.10.2021", "23.10.2021", "22.10.2021", "25.10.2021"],
'Product': ["apple", "apple", "orange", "orange", "apple","apple", "apple", "orange", "orange", "orange"],
'sold_kg': [2, 3, 1, 6, 2,2, 3, 1, 6, 2,]})
df['day']=pd.to_datetime(df['date']).dt.day
dft=df.pivot_table(values='sold_kg', columns ='day', index='Product', aggfunc=[np.sum,len])
dft
使用:
dft=df.pivot_table(values='sold_kg',columns='day', index='Product', aggfunc=['sum','size'])
首先用映射压平MultiIndex in columns
:
dft.columns = dft.columns.map(lambda x: f'{x[0]}_{x[1]}')
然后 select 列 DataFrame.filter
and sum
, for count values greater or equal use DataFrame.ge
并 True
数 sum
:
dft['Fruit Total'] = dft.filter(like='sum').sum(axis=1)
dft['Count >= 2'] = dft.filter(like='size').ge(2).sum(axis=1)
print (dft)
sum_22 sum_23 sum_25 size_22 size_23 size_25 Fruit Total \
Product
apple 8 2 2 3 1 1 12
orange 7 7 2 2 2 1 16
Count >= 2
Product
apple 1
orange 2
我有 DateFrame,如下所示。 我需要向 dft(数据透视输出)添加几列。第一个计算每天销售的产品总和,它类似于 margine,但仅用于 sum 列而不是 len。我试过 dft['Fruit Total']=df.iloc[:,0:3].sum(axis=1) 但它没有用。 我还想为列总和中的每一行添加列计数值 > 2。如图所示
df = pd.DataFrame({
'date': ["22.10.2021", "22.10.2021", "22.10.2021", "23.10.2021", "23.10.2021", "25.10.2021", "22.10.2021", "23.10.2021", "22.10.2021", "25.10.2021"],
'Product': ["apple", "apple", "orange", "orange", "apple","apple", "apple", "orange", "orange", "orange"],
'sold_kg': [2, 3, 1, 6, 2,2, 3, 1, 6, 2,]})
df['day']=pd.to_datetime(df['date']).dt.day
dft=df.pivot_table(values='sold_kg', columns ='day', index='Product', aggfunc=[np.sum,len])
dft
使用:
dft=df.pivot_table(values='sold_kg',columns='day', index='Product', aggfunc=['sum','size'])
首先用映射压平MultiIndex in columns
:
dft.columns = dft.columns.map(lambda x: f'{x[0]}_{x[1]}')
然后 select 列 DataFrame.filter
and sum
, for count values greater or equal use DataFrame.ge
并 True
数 sum
:
dft['Fruit Total'] = dft.filter(like='sum').sum(axis=1)
dft['Count >= 2'] = dft.filter(like='size').ge(2).sum(axis=1)
print (dft)
sum_22 sum_23 sum_25 size_22 size_23 size_25 Fruit Total \
Product
apple 8 2 2 3 1 1 12
orange 7 7 2 2 2 1 16
Count >= 2
Product
apple 1
orange 2