此问题已在此处有答案:
Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()(14个回答)
两年前关门了。
我想检查我正在处理的日期是否已经存在于DataFrame中。如果是,我想将另一个DataFrame中的值添加到该日期行的计数列中。我不,我只是想把新的一行连接到 Dataframe 。
我的数据框看起来像这样:
result_df:
date count
0 '2021-01-01' 10
1 '2021-01-02' 13
...
temp_df:
date count
0 '2021-01-02' 8
我使用的代码如下:
date = '2021-01-02'
if result_df.loc[result_df['date'].isin([date])].any():
result_df.loc[result_df['date'] == date, 'count'] += temp_df['count']
else:
result_df = pd.concat([result_df, temp_df], ignore_index=True)
因此,我有以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
请帮我解决这个问题。
3条答案
按热度按时间mw3dktmi1#
具体到您正在尝试的内容,您可以使用以下命令获取匹配的日期:
但是,由于您希望在
date
匹配时将两个df中的count
相加,因此使用df.merge()
创建一个具有必要匹配的嵌套框架,然后将“右侧”的df中的计数相加:请注意,这将在每个
date
上匹配,这在两个df中是通用的,而不仅仅是一个日期值。因此,您可以一次性为所有匹配的日期temp_df
执行此操作。fillna
用于为temp_df
中缺少的count
s输入0。在merged
Dataframe 中,它有_y
后缀:最终
result_df
为:对于您得到的错误,请参阅此问题-Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()。
sq1bmfud2#
如果您只匹配一个日期(如示例数据),则可以尝试:
结果:
代码出现错误的原因是因为Python if语句无法处理包含多个值的Pandas Series。因为你的
.isin()
代码实际上返回了一个布尔序列,其中有2个True
/False
值,对应于2个日期的2行的检查结果。因此,错误。你必须将Python if语句的使用替换为Pandas / numpy代码才能正确处理它。wqnecbli3#
如果我理解正确的话,你想检查一下日期是否在列中。可以这样做: