我希望从 Pandas df 中计算特定值。使用下面的内容,我将 Item
子集为 Up
并将 Num
和 Label
分组以计算 Item
中的值。输出中的值是正确的,但我想删除 Label
并在列标题中包含 Up
。
import pandas as pd
df = pd.DataFrame({
'Num' : [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2],
'Label' : ['A','B','A','B','B','B','A','B','B','A','A','A','B','A','B','A'],
'Item' : ['Up','Left','Up','Left','Down','Right','Up','Down','Right','Down','Right','Up','Up','Right','Down','Left'],
})
df1 = (df[df['Item'] == 'Up']
.groupby(['Num','Label'])['Item']
.count()
.unstack(fill_value = 0)
.reset_index()
)
预期输出:
Num A_Up B_Up
1 3 0
2 1 1
答案 0 :(得分:2)
通过您的方法,您可以将 Item 包含在石斑鱼中。
out = (df[df['Item'] == 'Up'].groupby(['Num','Label','Item']).size()
.unstack(['Label','Item'],fill_value=0))
out.columns=out.columns.map('_'.join)
print(out)
A_Up B_Up
Num
1 3 0
2 1 1
答案 1 :(得分:1)
您可以使用 Groupby.transform
来获得所有列名。然后使用 df.pivot_table
和 list comprehension
获取所需的列名称。
In [2301]: x = df[df['Item'] == 'Up']
In [2304]: x['c'] = x.groupby(['Num','Label'])['Item'].transform('count')
In [2310]: x = x.pivot_table(index='Num', columns=['Label', 'Item'], aggfunc='first', fill_value=0)
In [2313]: x.columns = [j+'_'+k for i,j,k in x.columns]
In [2314]: x
Out[2314]:
A_Up B_Up
Num
1 3 0
2 1 1