我想更新与选择器匹配的行。这基本上就是我想要的行为。
def select_rows(df, selector):
return df.loc[(df[list(selector)] == pd.Series(selector)).all(axis=1)]
def update_matching(df, selector, update):
selected = select_rows(df, selector)
updated = selected.assign(**update)
result = updated.combine_first(df)
return result
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
select_rows(df, {'b': 4})
# : a b
# : 1 2 4
update_matching(df, {'b': 4}, {'a': 99})
# : a b
# : 0 1.0 3.0
# : 1 99.0 4.0
int
更改为float
?我怎么能避免这个?答案 0 :(得分:0)
这是另一种选择。
def select_indexes(df, selector):
return (df[list(selector)] == pd.Series(selector)).all(axis=1)
def update_matching(df, selector, update):
new = df.copy()
update_keys, update_values = zip(*update.items())
rows = select_indexes(new, selector)
new.loc[rows, update_keys] = update_values
return new
答案 1 :(得分:0)
确实有一种更简单的方法可以根据列值选择行:
<div class="container">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae mollis nisi. Mauris vestibulum ac lacus ac vulputate. Maecenas molestie ex dolor, et aliquet augue varius sit amet. Vivamus eleifend nisl nulla, a pellentesque ipsum pharetra eget. Curabitur tincidunt non nibh vitae convallis. Nunc magna
<div class="overlay"></div>
</div>
并更新这些行:
df[df['b'] == 4]