我目前有一个包含如下信息的 excel 文件:
Company Initial Purchase Number
ABCD A123456789
ABCD B123456789
BCDE C123456789
BCDE D123456789
BCDE E123456789
CDEF F123456789
DEFG G123456789
DEFG H123456789
DEFG I123456789
DEFG J123456789
DEFG K123456789
我想把它变成一个表格,这样同一个公司的首字母就不会连续重复。
Company Initial Purchase Number
DEFG K123456789
ABCD A123456789
DEFG G123456789
ABCD B123456789
DEFG J123456789
BCDE C123456789
DEFG I123456789
BCDE D123456789
DEFG H123456789
BCDE E123456789
CDEF F123456789
我目前正在 Pandas 和 VBA 中尝试这个,但似乎无法找到一个可行的解决方案。我也对其他 Python 库持开放态度。
谢谢。
最佳答案
借助内存中的列表框的另一种可能性:
Sub Reshuffle()
Dim Arr As Variant, FreqArr As Variant, Place As Long, Comp1 As Variant, Comp2 As Variant
Dim rngArr As Range, i As Long, j As Long, k As Long, ListB1 As MSForms.ListBox, ListB2 As MSForms.ListBox
Set ListB1 = CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
Set ListB2 = CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
Set rngArr = Range("A2:B12")
With ListB1
.Column = Application.Transpose(rngArr)
ListB2.List = .List
For i = LBound(.List) To UBound(.List)
Arr = Application.Match(Application.Transpose(Application.Index(.List, 0, 1)), Application.Index(.List, 0, 1), 0)
FreqArr = Application.Frequency(Arr, Arr)
If Application.Max(FreqArr) > (UBound(.List) + 2) / 2 Then MsgBox "not possible"
For j = 1 To UBound(.List) + 1
Place = Application.Match(Application.Large(FreqArr, j), FreqArr, 0)
Comp2 = .List(Place - 1, 0)
If Comp2 <> Comp1 Then Exit For
Next j
Comp1 = Comp2
With ListB2
For k = LBound(.List, 2) To UBound(.List, 2)
.List(i, k) = ListB1.List(Place - 1, k)
Next k
ListB1.RemoveItem Place - 1
End With
Next i
End With
rngArr.Value = ListB2.List 'replaces in same range
Set ListB1 = Nothing
Set ListB2 = Nothing
End Sub
关于python - 数据帧交替数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250320/