熊猫:如果条件匹配,最多只能更新n行

时间:2020-08-07 08:24:04

标签: python pandas dataframe slice

我仅需要为[:1000]个正匹配项更新B列的值。如何以最健壮,最简单的方式实现这一目标?

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

2 个答案:

答案 0 :(得分:0)

这是一种方法。我正在使用合成数据进行演示。

# 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

答案 1 :(得分:0)

示例代码: 使用基本方法,从给定数据框中选择“百分比”大于80的所有行。

 # 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)