Ниже ниже, чем подходы здесь , но мы можем вычислить дополнительный столбец на основе содержимого более чем одного столбца, и для дополнительного столбца можно вычислить более двух значений.
Простой пример, используя только столбец «Установить»:
def set_color(row):
if row["Set"] == "Z":
return "red"
else:
return "green"
df = df.assign(color=df.apply(set_color, axis=1))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B green
3 Y C green
Пример с учетом большего количества цветов и большего количества столбцов:
def set_color(row):
if row["Set"] == "Z":
return "red"
elif row["Type"] == "C":
return "blue"
else:
return "green"
df = df.assign(color=df.apply(set_color, axis=1))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B green
3 Y C blue
Почему бы и нет:
mystr = "path: %s curr: %s prev: %s" % (mydict[path], curr, prev)
Между прочим, я изменил пару имен, которые вы использовали, чтобы попирать встроенные имена - не делайте этого, это никогда не нужно, и время от времени будет тратить много времени на отслеживание вызываемого им неправильного поведения (когда что-то использует встроенное имя, предполагая, что оно означает встроенное, но вы скрыли его с именем нашей собственной переменной).
И, конечно же, вы можете использовать более новый (начиная с версии 2.6) .format строковый метод:
>>> mydict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>>
>>> s = "path: {0} curr: {1} prev: {2}".format(mydict['path'], curr, prev)
>>> s
'path: /var/blah curr: 1.1 prev: 1.0'
Или, если бы все элементы были в словаре, вы могли бы сделать это:
>>> mydict = {"path": "/var/blah", "curr": 1.1, "prev": 1.0}
>>> "path: {path} curr: {curr} prev: {prev}".format(**mydict)
'path: /var/blah curr: 1.1 prev: 1.0'
>>>
Из документации str.format () :
Этот метод форматирования строки новый стандарт в Python 3.0 и следует предпочесть% форматирование описано в Операции форматирования строк в новом коде.
Вы можете попробовать следующее:
data = {"path": "/var/blah",
"curr": "1.1",
"prev": "1.0"}
s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
Возможно:
path = dict['path']
str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()
Я имею в виду, что это работает:
>>> dict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>> path = dict['path']
>>> str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()
>>> str
'path: /var/blah curr: 1.1 prev: 1.0'
Я просто не знаю, считаете ли вы это короче.