簡體   English   中英

根據值列 pandas 計數名稱

[英]counting names based on value column pandas

對於以下 dataframe,基於覆蓋兩種植物的顏色名稱,希望創建新列,如果兩種植物都存在顏色,則計數為 1,如果不是這種情況,則計數為 0:

東風:

Color      Plant
green1     1
blue2      1
red1       1
purple6    2
blue2      1
blue3      2
green1     2
green1     1
red2       1
purple6    1       

所需的 output:

Color      Plant   Spillover
green1     1       1
blue2      1       0
red1       1       0
purple6    2       1
blue2      1       0
blue3      2       0
green1     2       1
green1     1       1
red2       1       0
purple6    1       1

這是一個解決方案:

df["Spillover"] = df.groupby("Color").transform(lambda x: 1 in list(x) and 2 in list(x)).astype(int)

output 是:

     Color  Plant  Spillover
0   green1      1          1
1    blue2      1          1
2     red1      1          0
3  purple6      2          1
4    blue2      2          1
5    blue3      2          0
6   green1      2          1
7   green1      1          1
8     red2      1          0
9  purple6      1          1

如果您有多個工廠並且不喜歡 if 語句的“和”部分,您可以這樣做:

s = set([1,2]) # list of relevant plants
df["Spillover"] = df.groupby("Color").transform(lambda x: s.issubset(set(x))).astype(int)

我們可以使用GroupBy.nunique檢查每種顏色的獨特植物數量。 如果這些> 1 ,則植物之間存在溢出:

df['Spillover'] = df['Color'].map(df.groupby('Color')['Plant'].nunique()).gt(1).astype(int)

     Color  Plant  Spillover
0   green1      1          1
1    blue2      1          0
2     red1      1          0
3  purple6      2          1
4    blue2      1          0
5    blue3      2          0
6   green1      2          1
7   green1      1          1
8     red2      1          0
9  purple6      1          1

Color上使用DataFrame.groupby然后在Plant列上使用.transform來計算與給定顏色相關的唯一植物的數量,然后創建一個 boolean 掩碼m ,其中真實值對應於唯一植物大於 1 的條件:然后使用np.where到 select 10基於此掩碼m

m = df.groupby('Color')['Plant'].transform('nunique').gt(1)
df['Spillover'] = np.where(m, 1, 0)

df
     Color  Plant  Spillover
0   green1      1          1
1    blue2      1          0
2     red1      1          0
3  purple6      2          1
4    blue2      1          0
5    blue3      2          0
6   green1      2          1
7   green1      1          1
8     red2      1          0
9  purple6      1          1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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