繁体   English   中英

Pandas:根据另一个数据框列中的值范围计算单独数据框列框中的值(python)

[英]Pandas: Calculating a value in a separate data frame column frame based on range of values in another data frame column (python)

我正在使用 python 3.9,我正在尝试根据另一列中的值范围计算另一个 dataframe 列中的 output 值。

例如,在df['a']中,我有 0 到 50 之间的整数,没有特别的顺序。

我正在尝试根据if语句在同一个 dataframe 中创建另一个名为 df['output_column'] 的列。

import pandas as pd
import numpy as np

p = 'a'

if df[p] in range(0, 7):
    df['output_column'] = 95
elif df[p] in range(8, 14):
    df['output_column'] = 90
elif df[p] in range(15, 21):
    df['output_column'] = 85
elif df[p] in range(22, 28):
    df['output_column'] = 80
else:
    df['output_column'] = 75

但是,我收到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [18], in <module>
      1 p = 'a'
----> 3 if df[p] in range(0, 7):
      4     df['output_column'] = 95
      5 elif df[p] in range(8, 14):

File ~\path_to_pandas\pandas\core\generic.py:1535, in NDFrame.__nonzero__(self)
   1533 @final
   1534 def __nonzero__(self):
-> 1535     raise ValueError(
   1536         f"The truth value of a {type(self).__name__} is ambiguous. "
   1537         "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1538     )

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

我该如何纠正这个问题?

您可以使用pd.cut来执行此操作:

df['output'] = pd.cut(df[p], 
                      bins=[-np.inf,8,15,22,29,np.inf], 
                      labels=[95,90,85,80,75]).astype(int)

您可以使用.bewteen() 设置范围,然后使用 np.select() 填充新的 output_column。

import pandas as pd
import numpy as np

ranges = [df['a'].between(0, 6),
          df['a'].between(7, 13), df['a'].between(14, 20),
          df['a'].between(21, 27), df['a'].between(28, 999)]

values = [95,90, 85, 80, 75]

df['output_column'] = np.select(ranges, values)
df["output_column"] = 95
df.loc[df[p]>=8, "output_column"] = 90
df.loc[df[p]>=15, "output_column"] = 85
df.loc[df[p]>=22, "output_column"] = 80
df.loc[df[p]>=29, "output_column"] = 75

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM