Python 熊猫群比:如何获取第一个字符串
我有这个数据框:Python 熊猫群比:如何获取第一个字符串,python,pandas,Python,Pandas,我有这个数据框: dfexample = pd.DataFrame({'OID' : [7, 7, 7, 7], 'Category' : ['Plumbing', 'Plumbing', 'Plumbing', 'Plumbing'], 'Product_Type' : ['Accessory', 'Shower Accessories', 'Showers', 'Showers'],
dfexample = pd.DataFrame({'OID' : [7, 7, 7, 7],
'Category' : ['Plumbing', 'Plumbing', 'Plumbing', 'Plumbing'],
'Product_Type' : ['Accessory', 'Shower Accessories', 'Showers', 'Showers'],
'Extended_Price' : [20.5, 12.12, 122.45, 225.98]})
我想按“OID”对该数据帧进行分组,并获取对象列的“第一”字符串(类别
和产品类型
),因此在本例中,“管道”
和“附件”
)。期望输出:
[in]:dfgrouped
[out]:
OID Category Extended_Price Product_Type
7 Plumbing 381.05 Accessory
现在,我有一个将所有字符串连接在一起的函数,它不返回“first”字符串
def f(x):
return pd.Series(dict(Category = x['Category'].sum(),
Extended_Price = x['Extended_Price'].sum(),
Product_Type = x['Product_Type'].sum()
))
dfexample.groupby('OID').apply(f)
与groupby一起使用
dfexample.select_dtypes([object]).groupby(dfexample.OID).first()
Category Product_Type
OID
7 Plumbing Accessory
与groupby一起使用
dfexample.select_dtypes([object]).groupby(dfexample.OID).first()
Category Product_Type
OID
7 Plumbing Accessory
first
groupby方法返回每个组的第一个元素:
dfexample.groupby('OID').first()
显然,您还希望对数值列求和,因此需要使用agg
来指定要对每个列使用的聚合:
dfexample.groupby('OID').agg({
'Category': 'first',
'Product_Type': 'first',
'Extended_Price': 'sum'
})
first
groupby方法返回每个组的第一个元素:
dfexample.groupby('OID').first()
显然,您还希望对数值列求和,因此需要使用agg
来指定要对每个列使用的聚合:
dfexample.groupby('OID').agg({
'Category': 'first',
'Product_Type': 'first',
'Extended_Price': 'sum'
})
我会结合各种优秀的解决方案,并尝试推广解决方案:
In [135]: funcs = {col:'sum' if dfexample[col].dtype == np.number
else 'first'
for col in dfexample.drop('OID', 1).columns}
In [136]: dfexample.groupby('OID').agg(funcs)
Out[136]:
Category Product_Type Extended_Price
OID
7 Plumbing Accessory 381.05
说明:
In [134]: {col:'sum' if dfexample[col].dtype == np.number else 'first' for col in dfexample.drop('OID', 1).columns}
Out[134]: {'Category': 'first', 'Extended_Price': 'sum', 'Product_Type': 'first'}
我会结合各种优秀的解决方案,并尝试推广解决方案:
In [135]: funcs = {col:'sum' if dfexample[col].dtype == np.number
else 'first'
for col in dfexample.drop('OID', 1).columns}
In [136]: dfexample.groupby('OID').agg(funcs)
Out[136]:
Category Product_Type Extended_Price
OID
7 Plumbing Accessory 381.05
说明:
In [134]: {col:'sum' if dfexample[col].dtype == np.number else 'first' for col in dfexample.drop('OID', 1).columns}
Out[134]: {'Category': 'first', 'Extended_Price': 'sum', 'Product_Type': 'first'}
您可能需要dfexample.groupby('OID').first()
。您可能需要dfexample.groupby('OID').first()
。