簡體   English   中英

當您“或”兩個不匹配的系列時會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM