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
我有一个像这样的空 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