首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据另一列中的条件从Pandas Dataframe中提取值

根据另一列中的条件从Pandas Dataframe中提取值
EN

Stack Overflow用户
提问于 2021-06-17 18:11:25
回答 3查看 272关注 0票数 3

我正在尝试开发一些代码,用于提取发电厂启动时的电价。为了给出一个例子,请参考下面的数据帧。

代码语言:javascript
运行
复制
data = {
  'Power_Price':  [10, 11,15, 33, 50, 10, 12, 20, 17],
  'Plant_Ops_1': [0, 0, 10, 10, 10, 0, 0, 10, 10],
  'Plant_Ops_2': [0, 0, 0, 50, 50, 0, 0, 0, 0]
}

df = pd.DataFrame (data, columns = ['Power_Price','Plant_Ops_1','Plant_Ops_2'])

基于此,我的目标是开发一些代码,当工厂运行列从0转换为大于0的数字(即,当电厂启动时)时,将在数据帧中存储电价。在上述数据的情况下,输出将类似于以下内容:

代码语言:javascript
运行
复制
data_out = {
  'Plant': ['Plant_Ops_1', 'Plant_Ops_1', 'Plant_Ops_2'],
  'Power_price': [15, 20, 33]
}

df_out = pd.DataFrame (data_out, columns = ['Plant','Power_price'])

希望这是有意义的。当然,欢迎您能够提供的任何建议或指导。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-17 18:26:32

对每组移位等于0且更大的筛选行使用DataFrame.melt,就像boolean indexing中的0一样

代码语言:javascript
运行
复制
df = df.melt('Power_Price', var_name='Plant')

df = df[df.groupby('Plant')['value'].shift().eq(0) & df['value'].gt(0)].drop('value',axis=1)
print (df)
    Power_Price        Plant
2            15  Plant_Ops_1
7            20  Plant_Ops_1
12           33  Plant_Ops_2

如有必要,最后更改列的顺序:

代码语言:javascript
运行
复制
df = df[["Plant", "Power_Price"]]
票数 1
EN

Stack Overflow用户

发布于 2021-06-17 18:17:54

您可以这样做:

代码语言:javascript
运行
复制
df = df.melt(id_vars='Power_Price')

df[(df['value'] > df['value'].shift()) & (df['variable'] == df['variable'].shift())]

    Power_Price     variable  value
2            15  Plant_Ops_1     10
7            20  Plant_Ops_1     10
12           33  Plant_Ops_2     50
票数 1
EN

Stack Overflow用户

发布于 2021-06-17 18:26:15

我希望我已经正确理解了你的问题:

代码语言:javascript
运行
复制
df = df.melt(id_vars="Power_Price")
x = df["value"].eq(0)
x = df.groupby((x != x.shift()).cumsum()).head(1)
x = x[x["value"] > 0].rename(columns={"variable": "Plant"})[
    ["Plant", "Power_Price"]
]
print(x)

打印:

代码语言:javascript
运行
复制
          Plant  Power_Price
2   Plant_Ops_1           15
7   Plant_Ops_1           20
12  Plant_Ops_2           33
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68017264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档