您可以向DataFrame 添加一列,就像向字典添加键/值一样,即df["your_key"] = some_vals。您可以根据需要构建密钥。
一个问题是您分配的值应该是单个值或具有与DataFrame 的行数相同的元素数的值序列。所以在你的情况下
In [30]: from datetime import datetime
In [31]: import pandas
In [32]: df = pandas.DataFrame({"symbol": ["INFY", "RELIANCE"], "SMA1010915": [1562.97, 2127], "SMA100930": [15464, 2129],
...: "SMA100945": [1565.65, 2126.39]})
In [33]: time_str = datetime.now().strftime('%H%M')
In [34]: df["SMA10" + time_str] = [2000, 3000] # List of length two since there are two rows
In [35]: df
Out[35]:
symbol SMA1010915 SMA100930 SMA100945 SMA100938
0 INFY 1562.97 15464 1565.65 2000
1 RELIANCE 2127.00 2129 2126.39 3000
In [36]: new_time_str = "1230"
In [40]: df["SMA10" + new_time_str] = 100 # If single value, all rows get this
In [41]: df
Out[41]:
symbol SMA1010915 SMA100930 SMA100945 SMA100938 SMA101230
0 INFY 1562.97 15464 1565.65 2000 100
1 RELIANCE 2127.00 2129 2126.39 3000 100
如果您想为各个行分配值,您也可以这样做。我认为通过“符号”列索引您的DataFrame 可能是最简单的,所以类似于
In [51]: by_symbol = df.set_index("symbol")
In [55]: by_symbol
Out[55]:
SMA1010915 SMA100930 SMA100945
symbol
INFY 1562.97 15464 1565.65
RELIANCE 2127.00 2129 2126.39
In [56]: new_time_str = "1111"
In [57]: by_symbol.loc["INFY", "SMA10" + new_time_str] = 1234
In [58]: by_symbol
Out[58]:
SMA1010915 SMA100930 SMA100945 SMA101111
symbol
INFY 1562.97 15464 1565.65 1234.0
RELIANCE 2127.00 2129 2126.39 NaN
请注意,您可以在不按符号索引的情况下执行此操作。在这种情况下,您只需这样做
In [59]: df.loc[0, "SMA10" + new_time_str] = 1234
In [60]: df
Out[60]:
symbol SMA1010915 SMA100930 SMA100945 SMA101111
0 INFY 1562.97 15464 1565.65 1234.0
1 RELIANCE 2127.00 2129 2126.39 NaN