根据Pandas

时间:2017-09-25 04:03:11

标签: python pandas dataframe conditional

我有一个像这样的空df。

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

我有一个变量CompanyType,它可以有两个值,让我们说'公共'或者'私人'。我正在分析两种公司类型的数据,并希望用另一个变量值maxValue填写df,如果companyType =' private'和minVal如果companyType =' public'。 我创建了一个带有值的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'基于公司类型。换句话说,当我创建tempdf时,我想要条件。请帮忙。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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