大熊猫的分组依据专栏

时间:2020-07-14 16:37:11

标签: python-3.x pandas pandas-groupby

我正在尝试按熊猫对列值进行分组,但我没有得到。

示例:

Col1     Col2     Col3
A        1        2
B        5        6
A        3        4 
C        7        8
A        11       12
B        9        10
-----

result needed grouping by Col1

Col1     Col2     Col3  
A        1,3,11   2,4,12
B        5,9      6,10
c        7        8

但是我得到这个输出

我正在使用具有功能分组依据的excel功率查询并计算所有行,但是python和pandas却无法获得相同的结果。有帮助吗?

2 个答案:

答案 0 :(得分:1)

尝试一下

(
    df
    .groupby('Col1')
    .agg(lambda x: ','.join(x.astype(str)))
    .reset_index()
)

它输出

  Col1    Col2    Col3
0    A  1,3,11  2,4,12
1    B     5,9    6,10
2    C       7       8

答案 1 :(得分:0)

谢谢,它起作用了,但还有一个问题,可能是用换行符而不是逗号来分隔数据?

获得此输出:

 Dim Line As Range Dim financialPartner As String, financialProject As String

    financialPartner = excl.Workbooks("HNK-Status-CDAU.xlsx").Sheets("Financial").Cells(int_lin, 2)
    financialProject = excl.Workbooks("HNK-Status-CDAU.xlsx").Sheets("Financial").Cells(int_lin, 3)
    
    Dim found As Boolean
    found = False
    
    Dim lastRow As Long
    Dim financialChart As Chart
    Dim financialChartData As Range
    Dim financialChartTable As ListObject
    Dim financialChartTablews As Worksheet
            
    lastRow = ActiveWindow.Selection.SlideRange.Shapes("RevenuesVolume").Chart.chartData.Workbook.Sheets(1).Range("A1048576").End(xlUp).Row
    Set financialChart = ActiveWindow.Selection.SlideRange.Shapes("RevenuesVolume").Chart
    
    Set financialChartTablews = ActiveWindow.Selection.SlideRange.Shapes("RevenuesVolume").Chart.chartData.Workbook.Worksheets(1)
    Set financialChartTable = financialChartTablews.ListObjects("Tabela1")
    
    For Each Line In chartDataTable.DataBodyRange.Rows
        Dim lineNumber As Long
        lineNumber = Line.Row
        
        If ((Line.Columns(1) <> financialPartner) Or (Line.Columns(2) <> financialProject)) And found Then
            Exit For
        End If
        
        If (Line.Columns(1) = financialPartner) And (Line.Columns(2) = financialProject) Then
            found = True
            With financialChart.chartData
                Set financialChartData = .Workbook.Worksheets(1).ListObjects(1).Range
                financialChartData.Range("A" & lastRow).Value = chartDataWs.Cells(lineNumber, 4)
                financialChartData.Range("B" & lastRow).Value = chartDataWs.Cells(lineNumber, 5)
                financialChartData.Range("C" & lastRow).Value = chartDataWs.Cells(lineNumber, 6)
                lastRow = lastRow + 1
                financialChartTable.Resize Range("A1:C" & lastRow)
                .Workbook.Close
            End With
        End If
    Next
Next

提前谢谢!