[英]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 1
或0
基於此掩碼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.