我仅需要为[:1000]个正匹配项更新B列的值。如何以最健壮,最简单的方式实现这一目标?
condition_mask = (df["A"] >= from) & (df["A"] < to)
df.loc[condition_mask,'B'] = some_value
答案 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)