[英]What happens when you 'or' two mismatched Series?
因此,我創建了兩個由100個元素組成的系列,並將它們“或”在一起。 但是首先,我對第一個系列進行了“排序”,這意味着索引不會對齊。 我預期會發生錯誤。 還是不好的結果。 但是我得到的是帶有126個元素的第三系列! 那真是令人驚訝。 有什么想法嗎?
請注意billy_or_peter輸出清單中的“ Richardson”的4行。 有4個值,兩個為“ True”,兩個為“ False”。
我認為可能會有某種“笛卡爾積”導致200行。 但是,相反,我看到126行-這很奇怪。
思考?
# Loc and Iloc also allow for conditional statments to filter rows of data
# using Loc on the logic test above only returns rows where the result is True
only_billys = df.loc[df["first_name"] == "Billy", :]
print(only_billys)
only_peters = df.loc[df["first_name"] == "Peter", :]
print(only_peters)
print()
only_richardsons = df.loc["Richardson", :]
print(only_richardsons)
print()
isBilly = (df["first_name"] == "Billy").sort_index()
print(isBilly.describe())
print()
isPeter = (df["first_name"] == "Peter")
print(isPeter.describe())
print()
billy_or_peter = isPeter | isBilly
print(billy_or_peter.describe())
print(billy_or_peter)
OUTPUT
(only_billys)
id first_name Phone Number Time zone
last_name
Clark 20 Billy 62-(213)345-2549 Asia/Makassar
Andrews 23 Billy 86-(859)746-5367 Asia/Chongqing
Price 59 Billy 86-(878)547-7739 Asia/Shanghai
id first_name Phone Number Time zone
(only_peters)
last_name
Richardson 1 Peter 7-(789)867-9023 Europe/Moscow
id first_name Phone Number Time zone
(only_richardsons)
last_name
Richardson 1 Peter 7-(789)867-9023 Europe/Moscow
Richardson 25 Donald 62-(259)282-5871 Asia/Jakarta
(isBilly.describe() - sorted index)
count 100
unique 2
top False
freq 97
Name: first_name, dtype: object
(isPeter.describe())
count 100
unique 2
top False
freq 99
Name: first_name, dtype: object
(billy_or_peter.describe() - 126 rows???)
count 126
unique 2
top False
freq 121
Name: first_name, dtype: object
(billy_or_peter listing - notice 4 Richardsons where before there were only 2)
last_name
Adams False
Allen False
Andrews True
Austin False
Baker False
Banks False
Bell False
Berry False
Bishop False
Black False
Brooks False
Brown False
Bryant False
Bryant False
Bryant False
Bryant False
Burke False
Butler False
Butler False
Butler False
Butler False
Carroll False
Chapman False
Chavez False
Clark True
Collins False
Cook False
Day False
Day False
Day False
...
Price True
Reid False
Reyes False
Rice False
*Richardson True
*Richardson True
*Richardson False
*Richardson False
Riley False
Roberts False
Robertson False
Robinson False
Rogers False
Scott False
Shaw False
Shaw False
Shaw False
Shaw False
Simmons False
Snyder False
Sullivan False
Torres False
Tucker False
Vasquez False
Wagner False
Walker False
Washington False
Watkins False
Wells False
Williamson False
Name: first_name, Length: 126, dtype: bool
不匹配不是這里的問題, pandas
會在|
之前對齊|
。 您的問題是由於索引重復。 為此,將比較作為匹配索引中的outer
聯接進行。 因此,一個中的2個Richardsons和另一個中的2個Richardsons將導致您的輸出中有4行。
為了更清楚地說明這一點,請看一下添加具有重復索引和未對齊索引的字符串時發生的情況。 我們從笛卡爾乘積中得到索引1的6(2 x 3)行:
import pandas as pd
df1 = pd.DataFrame(list('abcd'), index=[1,1,2,3])
df2 = pd.DataFrame(list('1243'), index=[1,1,3,1])
df1+df2
0
1 a1
1 a2
1 a3
1 b1
1 b2
1 b3
2 NaN
3 d4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.