【问题标题】:Adding a value to a column in a DataFrame depending on a value in another column根据另一列中的值向 DataFrame 中的列添加值
【发布时间】:2021-08-23 05:14:14
【问题描述】:

我有一个包含多列的 DataFrame。

    base_rate weighting_factor  index_1  
0         NaN                         0  
1    1.794836                         1  
2    1.792804                         2  
3    1.795893                         3  
4    1.798023                         4  
5    1.795517                         5  
6    1.798652                         6  
7    1.794425                         7  
8    1.796899                         8 

专栏

权重因子

为空。现在我想逐行将值附加到该列,如果

index_1

位于特定整数边界之间。

我试过了

if df['index1'] <= oldest_max:
    werte_df["weighting_factor"].append(wf_tooold)

而 wf_tooold 是一个浮点数,而 old_max 是一个整数。

我得到的错误是

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

在相应列中填写值的好方法是什么?

初始化数据框的代码示例:

d = {'index_1': [1,2,3,4,5,6,7,8,9,10,11,12]}
df = pd.DataFrame(data=d)
df["weighting_factor"]= ""

【问题讨论】:

  • 请包含初始化数据框的代码。
  • 我更新了问题,希望这符合您的需求

标签: python dataframe


【解决方案1】:

您基本上想用一个值更新过滤后的行数,因此您可以这样做:

df<strong>.loc[df['index_1'] &lt;= oldest_max, 'weighting_factor']</strong> = wf_toold

例如,oldest_max = 4wf_toold = 14.25,我们得到:

>>> df
    index_1 weighting_factor
0         1            14.25
1         2            14.25
2         3            14.25
3         4            14.25
4         5                 
5         6                 
6         7                 
7         8                 
8         9                 
9        10                 
10       11                 
11       12

不过,最好将weighting_factorNaN 作为起始值,否则pandas 会将weighting_factor 视为对象的Series,而不是浮点数:

from numpy import NaN
df['weighting_factor']= NaN

您可以通过以下方式检查下限和上限:

df<strong>.loc[df['index_1'].between(old_min, oldest_max), 'weighting_factor']</strong> = wf_toold

【讨论】:

  • 真的很有帮助,谢谢!如果我现在想更新大于最旧最大值(>=最旧_最大值)但低于旧最小值(= old_max & ,我会收到错误消息
  • @maki:你应该使用df.loc[(df['index_1'] &gt;= oldest_max) &amp; (df['index_1'] &lt;= old_min), 'weighting_factor'] = wf_old,或者更好的是df.loc[(df['index_1'].between(old_min, oldest_max), 'weighting_factor'] = wf_old
猜你喜欢
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多