Проблема в том, что ячейке в таблице требуется как значение индекса строки, так и значение индекса столбца для вставки значения ячейки. Итак, вам нужно решить, являются ли «a», «b», «c» и «t» столбцами или индексами строк.
Если они являются индексами столбцов, тогда вам понадобится индекс строки ( 0 в приведенном ниже примере) вместе с тем, что вы написали выше:
df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[0, "b"] = 2
df.loc[0, "c"] = 3
Результат:
In : df
Out:
a b c
0 1234.0 2.0 3.0
Теперь, когда у вас есть данные в фрейме данных, вы можете выполнять операции со столбцами (т. Е. создайте новый столбец «t» и для каждой строки присвойте значение соответствующего элемента в столбце «b», разделенное на соответствующие элементы в столбце «c»):
df["t"] = df["b"]/df["c"]
Конечно, вы также можете использовать разные индексы для каждого элемента следующим образом:
df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[1, "b"] = 2
df.loc[2, "c"] = 3
Результат:
In : df
Out:
a b c
0 1234.0 NaN NaN
1 NaN 2.0 NaN
2 NaN NaN 3.0
Но, как вы можете видеть, ячейки, в которых вы не указали кортеж (строка, столбец, значение) теперь NaN
. Это означает, что если вы попробуете df["b"]/df["c"]
, вы получите значения NaN, поскольку вы пытаетесь выполнить линейную операцию со значением NaN.
In : df["b"]/df["c"]
Out:
0 NaN
1 NaN
2 NaN
dtype: float64
Обратное, если вы хотите вставить элементы в один столбец. Теперь для этого вам понадобится заголовок столбца (0 ниже):
df = pd.DataFrame()
df.loc["a", 0] = 1234
df.loc["b", 0] = 2
df.loc["c", 0] = 3
Результат:
In : df
Out:
0
a 1234.0
b 2.0
c 3.0
Теперь, вставив значение для «t», вам понадобится чтобы точно указать, какие ячейки вы имеете в виду (обратите внимание, что pandas не будет выполнять операции векторизованных строк так же, как операции векторизованных столбцов).
df.loc["t", 0] = df.loc["b", 0]/df.loc["c", 0]