Pandas: Как обновить только до n строк, если условие выполнено - PullRequest
0 голосов
/ 07 августа 2020

Мне нужно обновить значения столбца B только для [: 1000] положительных совпадений. Как я могу реализовать это наиболее надежным и простым способом?

    condition_mask =  (df["A"] >= from) & (df["A"] < to)
    df.loc[condition_mask,'B'] = some_value

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

пример кода: выбор всех строк из заданного фрейма данных, в которых 'Percentage' больше 80, с использованием метода basi c.

 # importing pandas 
import pandas as pd 

record = { 

'Name': ['Ankit', 'Amit', 'Aishwarya', 'Priyanka', 'Priya', 'Shaurya' ], 
'Age': [21, 19, 20, 18, 17, 21], 
'Stream': ['Math', 'Commerce', 'Science', 'Math', 'Math', 'Science'], 
'Percentage': [88, 92, 95, 70, 65, 78] } 

# create a dataframe 
dataframe = pd.DataFrame(record, columns = ['Name', 'Age', 'Stream', 'Percentage']) 

print("Given Dataframe :\n", dataframe) 

# selecting rows based on condition 
rslt_df = dataframe[dataframe['Percentage'] > 80] 

print('\nResult dataframe :\n', rslt_df) 
0 голосов
/ 07 августа 2020

Вот способ сделать это. Я использую данные Syntheti c для демонстрации.

# Create data: 
df = pd.DataFrame({"a": np.random.randint(0, 5, 10), 
                  "b": np.random.randint(0, 5, 10)}) 
print(df)

   a  b
0  4  1
1  0  0
2  0  2
3  3  3
4  2  4
5  3  3
6  2  3
7  1  4
8  0  0
9  2  3

Фактическое решение (в пару шагов, для ясности):

mask = df.a >= 2
df["mask_counter"] = df.groupby(mask).cumcount()
df.loc[mask & (df.mask_counter <= 2), "b"] = 5
print(df)

Вывод:

   a  b  mask_counter
0  4  5             0
1  0  0             0
2  0  2             1
3  3  5             1
4  2  5             2
5  3  3             3
6  2  3             4
7  1  4             2
8  0  0             3
9  2  3             5
...