Select 列值基于 Pandas 中的 if 条件

Select column values based on an if condition in Pandas

我有一个像这样的空 df 。

dfSummary=pd.DataFrame(columns=['Company Type' , 'Max_Val', 'Min_Val'] , dtype=str)

我有一个变量 CompanyType,它可以有两个值,比方说 'public' 或 'private'。我正在分析两种公司类型的数据,如果 companyType = 'private',我想用另一个变量值 maxValue 填充 df,如果 companyType = 'public',则用 minVal 填充。 我创建了一个带有值的 tempdf 并用 dfSummary 连接它。

tempdf=pd.DataFrame({'CompanyType':companyType, 'max Val': maxVal,'min Val': minVal }, index=[0])
dfSummary=pd.concat([dfSummary,tempdf])

我想以 pythonic 方式初始化 temdf,根据公司类型使用 'max Val' 或 'min Val'。换句话说,我想在创建 temppdf 时有 if 条件。请帮忙。

col = [companyType] + ([maxValue, np.nan] 
             if companyType == 'public' else [np.nan, minValue])    
df = pd.DataFrame([col], columns=['Company Type' , 'Max_Val', 'Min_Val'])

IIUC

设置

dfSummary = pd.DataFrame(
    [['public', 'a', 'b'],
     ['private', 'c', 'd'],
     ['public', 'e', 'f'],
     ['private', 'g', 'h'],
     ['privage', 'i', 'j']],
    columns=['Company Type' , 'Max_Val', 'Min_Val'],
    dtype=str
)

dfSummary

  Company Type Max_Val Min_Val
0       public       a       b
1      private       c       d
2       public       e       f
3      private       g       h
4      privage       i       j

解决方案 1
np.where

dfSummary.assign(
    New=np.where(
        dfSummary['Company Type'] == 'public',
        dfSummary.Max_Val, dfSummary.Min_Val)
)

  Company Type Max_Val Min_Val New
0       public       a       b   a
1      private       c       d   d
2       public       e       f   e
3      private       g       h   h
4      privage       i       j   j

解决方案 2
随着 pd.Series.where

dfSummary.assign(
    New=dfSummary.Max_Val.where(
        dfSummary['Company Type'] == 'public',
        dfSummary.Min_Val)
)

  Company Type Max_Val Min_Val New
0       public       a       b   a
1      private       c       d   d
2       public       e       f   e
3      private       g       h   h
4      privage       i       j   j