W pierwszym przypadku używam bardzo prostego DataFrame
, aby spróbować użyć pandas.cut()
do zliczenia unikatowych wartości w jednej kolumnie w zakresie innej kolumny. Kod działa zgodnie z oczekiwaniami:Dlaczego pandas.cut() zachowuje się inaczej w unikalnym liczeniu w dwóch podobnych przypadkach?
Jednak w poniższym kodzie pandas.cut()
liczy się liczba unikatowych wartości niepowołane. Oczekuję, że pierwszy pojemnik (1462320000, 1462406400) będzie miał 5 unikatowych wartości, a inne pojemniki, w tym ostatni pojemnik (1462752000, 1462838400), będą miały 0 unikatowych wartości:
Zamiast tego, jak pokazano w wyniku, kod zwraca 5 unikalne wartości w ostatniej skrzyni (1462752000, 1462838400], podczas gdy 2 podkreślone wartości nie powinny być liczone, bo są poza zasięgiem.
więc może ktoś wyjaśnić dlaczego pandas.cut()
zachowuje się tak różne w tych 2 przypadkach? A także byłbym bardzo wdzięczny, gdyby możesz mi również powiedzieć, jak mogę poprawić kod, aby poprawnie policzyć liczbę unikatowych wartości w jednej kolumnie w zakresie wartości innej kolumny.
źródło dodatkowego INFO: (proszę importować pandas
i numpy
do uruchomienia kodu, moja wersja pandy jest 0.19.2, a używam Pythona 2.7)
Dla gotowy odniesienia, niniejszym po moi DataFrame
i kody, aby odtworzyć mój kod:
Przypadek 1:
df = pd.DataFrame({'No': [1,1.5,2,1,3,5,10], 'useragent': ['a', 'c', 'b', 'c', 'b','a','z']})
print type(df)
print df
df.groupby(pd.cut(df['No'], bins=np.arange(0,4,1))).useragent.nunique()
Przypadek 2:
print type(df)
print len(df)
print df.time.nunique()
print df.hash.nunique()
print df[['time','hash']]
df.groupby(pd.cut(df['time'], bins =np.arange(1462320000,1462924800,86400))).hash.nunique()
Przypadek 2 Dane za:
time hash
1462328401 qo
1462328401 qQ
1462838401 q1
1462328401 q1
1462328401 qU
1462328401 qU
1462328401 qU
1462328401 qU
1462328401 qX
1462838401 qX
działa jak czar. Dziękuję za niespodziankę z tolist() – weefwefwqg3