Pandas新专栏附条件

pnwntuvh  于 2022-12-31  发布在  其他
关注(0)|答案(3)|浏览(119)

我有一个数据框如下:

我需要创建一个名为Value-2的新列:如果值-1小于500,则需要用0.5填充该值。如果值小于1000,则需要用1填充该值。
预期结果:

有人能帮帮我吗?

kh212irz

kh212irz1#

我认为np.where函数在处理大量数据时也能高效工作。

import pandas as pd
import numpy as np

dictionary = {
    "Company" : ['A','A','A','A','A','A'],
    "Value1" : [480,120,876,340,996,1104]
}

dataframe = pd.DataFrame(dictionary)
dataframe["Value2"] = np.where(dataframe["Value1"] < 500, 1, 0.5)

输出:

Company  Value1  Value2
0       A     480     0.5
1       A     120     0.5
2       A     876     1.0
3       A     340     0.5
4       A     996     1.0
5       A    1104     1.0
gdx19jrr

gdx19jrr2#

试试这个,你可以根据自己的需要调整算法。这里是一个简单的if/else

df['Value-2'] = df['Value-1'].apply(lambda x: 0.5 if x < 500 else 1)

#  Company  Value-1  Value-2
# 0       A      480      0.5
# 1       A      120      0.5
# 2       A      876      1.0
# 3       A      340      0.5
# 4       A      996      1.0
# 5       A     1104      1.0

使用自定义函数

按照要求,这里是如何编写一个自定义函数,以具有比单行lambda函数更大的灵活性。

def my_fun(x):
  # can be a switch case or any complex algorithm
  return 0.5 if x < 500 else 1

df['Value-2'] = df['Value-1'].apply(my_fun)

注解

这个问题在一点上是不一致的。它说
如果值小于1000,则需要用1填充该值。
但预期结果显示"值-1"大于1000的Value-2 = 1Value-1 = 1104.

myzjeezk

myzjeezk3#

请在以后提问时提供工作代码。

import pandas as pd

Data = {
    "Company" : ['A','A','A','A','A','A'],
    "Value1" : [480,120,876,340,996,1104]
}

DataFrame1 = pd.DataFrame(Data)

DataFrame2 = []

for x in DataFrame1['Value1']:
    if x < 500 : DataFrame2.append(0.5)
    elif x < 1000 or x > 1000 : DataFrame2.append(1) # As the picture given in the question tells Value 2 is 1 when value 1 is 1104
    else : pass

DataFrame1['Value2'] = DataFrame2
print(DataFrame1)
Outputs
  Company  Value1  Value2
0       A     480     0.5
1       A     120     0.5
2       A     876     1.0
3       A     340     0.5
4       A     996     1.0
5       A    1104     1.0

相关问题