Если производительность важна, переходите к уровню numpy:
import numpy as np
df = pd.DataFrame( {'a':np.random.randint(0,60,600), 'b':[1,2,5,5,4,6]*100})
def f(df):
keys,values=df.sort_values('a').values.T
ukeys,index=np.unique(keys,True)
arrays=np.split(values,index[1:])
df2=pd.DataFrame({'a':ukeys,'b':[list(a) for a in arrays]})
return df2
Тесты:
In [301]: %timeit f(df)
1000 loops, best of 3: 1.64 ms per loop
In [302]: %timeit df.groupby('a')['b'].apply(list)
100 loops, best of 3: 5.26 ms per loop
Как упомянуто в комментарии Persistent13, разница в кодировании является наиболее вероятной причиной. Класс кодирования в .Net имеет несколько статических членов, соответствующих общим кодировкам, но ISO-8859-1 не является одним из них. Остальное можно увидеть с помощью [System.Text.Encoding]::GetEncodings()
, а конкретное - с помощью [System.Text.Encoding]::GetEncoding()
(есть несколько перегрузок).
Так, например, попробуйте это:
$bytes = [System.Text.Encoding]::GetEncoding('iso-8859-1').GetBytes($string)
[System.Security.Cryptography.HashAlgorithm]::Create("sha1").ComputeHash($bytes)
Поскольку вы не можете изменить часть PowerShell, вы можете сделать это просто для проверки теории в консоли.
Или перейдите прямо к изменению Ruby для использования UTF8.
varj_Encoded = varj.encode(Encoding::UTF-8)
puts Digest::SHA1.hexdigest(varj_Encoded)
Кодирование не имеет значения в этой ситуации, поскольку мы имеем дело только с символами ASCII, и они оба кодируют ASCII одинаково. Проблема в
Ваши данные различны в обоих случаях, обратите внимание на пробелы, предшествующие Directory
и ControlCase
в вашем первом примере, но не представлены во втором.
Вам необходимо избежать обратной косой черты в строке ruby или интерпретировать их как escape-символы
Как только вы решите эти две проблемы, вы получите тот же результат:
PS:
PS H:\> $String = " >> >> Directory: D:\OneDrive - >> ControlCase\jt-work\evidance-collection\evidances-text\PCI_Evidences_CCIN-CAS-VKAUS\evidences >> >> >> Mode LastWriteTime Length Name >> ---- ------------- ------ ---- >> -a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1 >> -a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt >> -a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt >> -a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt >> -a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt >> -a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt >> -a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt >> -a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt >> -a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt >> >> " PS H:\> Get-Hash($string) 6454c0ecf1700448fb2496037a1e9ce496b185cd
Ruby:
>> varj = " .. .. Directory: D:\\OneDrive - .. ControlCase\\jt-work\\evidance-collection\\evidances-text\\PCI_Evidences_CCIN-CAS-VKAUS\\evidences .. .. .. Mode LastWriteTime Length Name .. ---- ------------- ------ ---- .. -a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1 .. -a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt .. -a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt .. -a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt .. -a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt .. -a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt .. -a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt .. -a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt .. -a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt .. .. " >> puts Digest::SHA1.hexdigest(varj.encode(Encoding::UTF_8)) => 6454c0ecf1700448fb2496037a1e9ce496b185cd >> puts Digest::SHA1.hexdigest(varj.encode(Encoding::ISO_8859_1)) => 6454c0ecf1700448fb2496037a1e9ce496b185cd
Редактировать:
Если вы все еще не можете Соответствие, я думаю, лучший подход - сравнить байтовые значения каждой строки, чтобы определить различия.
PS:
PS H:\> $enc = [system.Text.Encoding]::UTF8 PS H:\> $enc.GetBytes($String) 10 10 32 32 ...
Ruby:
>> varj_Encoded.bytes.to_a => [10, 10, 32, 32, ...