所以我想在现有值中为熊猫数据框中的特定位置添加一个值。我尝试如下:
import calendar
for index,row in data.iterrows():
print(index)
if row.mask:
date = calendar.monthrange(int(row.year), int(row.month))
date = pd.to_datetime(str(int(row.year))+'-'+str(int(row.month))+'-'+str(date[1]))
diff = data.real - data.fiction
df.loc[df.date==date, 'zeta']+=diff
但是最后此操作后的值与之前的值相同,我不明白为什么我使用loc指向特定的positio并且可以更改值。但是我的行不通。
数据样本:
因此,这里涉及两个数据帧。一个是df,看起来像:
{'date': [datetime.date(2018, 7, 1),
datetime.date(2018, 7, 2),
datetime.date(2018, 7, 3),
datetime.date(2018, 7, 4),
datetime.date(2018, 7, 5),
datetime.date(2018, 7, 6),
datetime.date(2018, 7, 7),
datetime.date(2018, 7, 8),
datetime.date(2018, 7, 9),
datetime.date(2018, 7, 10)],
'alpha': [899.8399999999998,
804.2400000000001,
824.6400000000001,
903.7599999999999,
761.2900000000001,
766.7999999999998,
765.0699999999998,
882.8600000000001,
741.8199999999999,
729.6600000000001],
'beta': [660.24,
514.87,
456.6600000000001,
490.29,
469.83,
506.4,
571.65,
651.18,
545.5,
544.99],
'gamma': [1555.5299999999988,
1512.829999999999,
1507.4699999999991,
1491.1799999999994,
1019.4199999999994,
650.0699999999995,
674.7599999999999,
676.0899999999992,
464.05999999999966,
455.03000000000003],
'delta': [178.02,
150.75,
136.14999999999998,
147.51999999999998,
160.93000000000004,
131.96999999999997,
117.31,
131.88,
160.57000000000008,
158.73999999999998],
'epsilon': [0.0,
375.7099915,
464.85501100000005,
464.8450012,
484.63500980000003,
514.664978,
471.16000369999995,
459.8599853999999,
461.4349976,
441.9400024],
'zeta': [282.9800053,
156.5300011,
109.93999609999999,
83.86999995,
168.62735590000003,
170.31219380000002,
73.63714508,
119.776293,
179.14328830000002,
446.6358328],
'total': [3576.6100052999986,
3514.929992599999,
3499.7150070999996,
3581.4650011499994,
3064.7323656999997,
2740.2171717999995,
2673.5871487799996,
2921.646278399999,
2552.5282859,
2776.9958352000003]}
数据如下:
{'month': [1, 2, 3, 4, 5, 6, 7, 8],
'year': [2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020],
'fiction': [4904.049999999999,
5098.29,
8582.139999999998,
13712.130000000001,
20505.370000000003,
3629.21,
0.0,
0.0],
'real': [14528.33,
12592.45,
8582.14,
13712.12,
20505.4,
19356.6,
18205.0,
13028.29],
'mask': [True, True, False, False, False, True, True, True]}
掩码的计算方法如下:
(data.real - data.fiction).map(int).map(bool)
答案 0 :(得分:0)
您有两个错误。
mask是一个内置函数,在任何情况下{"year": ["1999", "2000"], "name": ["bill", "jess"], "cardV": ["base","silver"]}
都将返回True。因为无论您希望函数存在与否,函数都会存在,因此实际上不使用基于函数的检查。我在if语句中添加了一条print语句。只是为了确保尝试将其添加到if块中,您将了解其中的区别。 (如果您必须用这种方式命名,尽管我无法想到必须选择内置函数名称的情况,请像这样:if row.mask
,不要测试熊猫的智力。)
您可能会收到一些错误消息。您很有可能希望在该特定行上有所不同(如果没有,则在遍历整个数据帧时会出现很大的问号),因此您可能想使用if row['mask']
而不是{{1} }。我按预期进行了这两项更改和数据框更改。这是您可能要插入更改的代码
row.real - row.fiction