根据熊猫的if条件选择列值
问题描述:
我有一个像这样的空df。根据熊猫的if条件选择列值
dfSummary=pd.DataFrame(columns=['Company Type' , 'Max_Val', 'Min_Val'] , dtype=str)
我有一个变量CompanyType,它可以有两个值让我们说'公共'或'私人'。我正在分析两种公司类型的数据,并且想要用另一个变量值maxValue(如果companyType ='private')和minVal(如果companyType ='public')填充df。 我使用dfSummary创建了一个带有值和concat的tempdf。
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。请帮忙。
答
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
溶液1np.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
+0
这是一个很好的解决方案。我不确定这是OP想要的,但它仍然值得一些+1。 –
你应该明白,'dfSummary'有3列,所以无论你是用串联也必须有3列。如果要输入minVal,那么Max_Val列的值是多少? –
minVal或maxVal之一将基于companyType值为空。如果条件是我创建dfTemp时,我想要处理相同的行。 –
你使用的是什么版本的Python? –