Скажем, у меня есть следующий фрейм данных:
Каков наиболее эффективный способ обновить значения столбцов feat и another_feat, где поток имеет номер 2 ?
Это все?
for index, row in df.iterrows():
if df1.loc[index,'stream'] == 2:
# do something
ОБНОВЛЕНИЕ: что делать, если у меня более 100 столбцов? Я не хочу явно называть столбцы, которые хочу обновить. Я хочу разделить значение каждого столбца на 2 (кроме столбца потока).
Итак, чтобы было ясно, какова моя цель:
Разделение всех значений на 2 из всех строк, имеющих поток 2, но без изменения столбца потока
100
столбцы. например, если нужны100
первые столбцы, используйте,df.columns[:100]
а затем переходите кloc
.Вы можете сделать то же самое
.ix
, например:In [1]: df = pd.DataFrame(np.random.randn(5,4), columns=list('abcd')) In [2]: df Out[2]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 -0.905302 -0.435821 1.934512 3 0.266113 -0.034305 -0.110272 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315 In [3]: df.ix[df.a>0, ['b','c']] = 0 In [4]: df Out[4]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 0.000000 0.000000 1.934512 3 0.266113 0.000000 0.000000 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315
РЕДАКТИРОВАТЬ
После дополнительной информации все столбцы, при соблюдении некоторых условий, будут возвращены с уменьшенными вдвое значениями:
>> condition = df.a > 0 >> df[condition][[i for i in df.columns.values if i not in ['a']]].apply(lambda x: x/2)
Надеюсь, это поможет!
источник
condition = (df.a == -1.001287)
ожидая, что значения будут разделены на строку, в которой,a == -1.001287
но я получил пустой фрейм данных.df.iloc[1,0]
. Или еще лучше установите значение самостоятельно, а затем попробуйте еще раз:df.iloc[1,0] = 1.2345; condition = df.a == 1.2345
condition = (df.a == -1.001287)
не работает?ix
теперь устарела.