Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫群比:如何获取第一个字符串_Python_Pandas - Fatal编程技术网

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()