Jak získat počet položek v řádcích, stejně jako kontrola, jedna položka je přítomen, nebo ne, a nakonec si první řádek v pythonu?

0

Otázka

Předpokládejme, že mám datový rámec takto:

 df = pd.DataFrame({
        'Column A': [12,12,12, 13, 15, 16, 141, 141, 141, 141],
         'Column B':['Apple' ,'Apple' ,'Orange' ,'Apple' , np.nan, 'Orange', 'Apple', np.nan, 'Apple', 'Apple']}) 

Na základě těchto podmínek:

  • Pokud hodnoty ve sloupci jsou opakované pak spočítat slovo "Oranžové" ve Sloupci B a vložte jej do nového Sloupce C(například, tam jsou 3 řádky pro 12, počet "Oranžová" je 1 a tato 1 by měla být v nový sloupec C). Pro non-opakování řádků, stačí vložit odpovídající hodnoty.

  • Pokud hodnoty ve sloupci jsou opakované pak spočítat slovo "Apple", v Sloupci B a vložte jej do nového Sloupce D(například, tam jsou 3 řádky pro 12, hrabě z "Apple" je 2, a to 2 by měly být v nový sloupec D). Pro non-opakování řádků, stačí vložit odpovídající hodnoty.

  • Pro opakované a non-opakované řádky vzhledem k Sloupci A, je-Li slovo "Oranžová" je přítomen ve Sloupci B, napište " ano "else" Ne " ve Sloupci E.

Chtěl bych mít výstupní následující. Snažil jsem se v pythonu jupyter notebooku, může někdo prosím, pomozte mi získat výstup jako tento:

      | Column A | Column B |Column C |Column D |Column E 
----- | -------- | ---------|---------|---------|---------
 0    | 12       | Apple    |1        |2        |Yes   
 1    | 13       | Apple    |0        |1        |No 
 2    | 15       | NaN      |NaN      |NaN      |NaN     
 3    | 16       | Orange   |1        |0        |Yes      
 4    | 141      | Apple    |0        |3        |No   

Díky předem:)

1

Nejlepší odpověď

2

Myslím, že není žádný výkonné a jednoduché řešení pro vaši otázku, ale použijte následující kód.

Za prvé, definovat funkci count(x, a) který se vrací nan pokud x obsahuje nanpočet výskyt v x, jinak. Funkce bude použit pro použít funkci.

Potom pomocí group by a použít seznam funkcí.

temp = df.copy().groupby('Column A')['Column B'].apply(list)

Po tom, temp stává

Column A
12         [Apple, Apple, Orange]
13                        [Apple]
15                          [nan]
16                       [Orange]
141    [Apple, nan, Apple, Apple]
Name: Column B, dtype: object

Takže, na základě temp, můžeme počítat počet jablek a pomeranče.

Od df má duplikáty, odstranil jsem je a přidávat nové sloupce (Sloupce C, D a E).

df.drop_duplicates(subset = ['Column A'], keep = "first", inplace = True)
df['Column C'] = temp.apply(count, a = "Orange").values
df['Column D'] = temp.apply(count, a = "Apple").values
df['Column E'] = df['Column D'].apply(lambda x:1 if x>=1 else 0)

Edit

Je mi to líto. Jsem vynechal funkce počítat..

def count(x, a):
    if type(x[0]) == float:
        return np.nan
    else:
        return x.count(a)
2021-11-11 12:31:49

Teď jsem se na výstup, jak je uvedeno níže, a které je správné. 0 1.0 3 0.0 NaN 4 5 1.0 6 0.0 je možné změnit levou stranu počet 0 3 4 5 6 počítaných hodnot 0 1 2 3 4 5?
new_bee

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................