首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:根据条件和先前的行值创建列值

熊猫:根据条件和先前的行值创建列值
EN

Stack Overflow用户
提问于 2022-09-02 17:10:25
回答 3查看 40关注 0票数 0

在这个给定的示例中,我想在Pandas dataframe 'df‘中创建一个列,其中每个行的值都是基于其前面的行以及来自另一个列'id’的值。例如,如果'id‘已经在'amount’列中分配给它的值为30,那么其他值为30。

预期结果如下:

代码语言:javascript
复制
id  amount
a   30
b   30
a   0
a   0
c   30
a   0
c   0
b   0
b   0
a   0
a   0

我以为我可以通过groupby和lambda的结合来实现这一点,但遗憾的是,我已经多次撞到墙了。

我试过的是:

df['amount'] = df.apply(lambda x: 30 if df.groupby('id')['amount'].cumsum()<30 else 0)

这给了我以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如果解决方案是显而易见的,我会提前道歉,但不幸的是,到目前为止,我还没有找到任何可以解决这个问题的方法。

谢谢

EN

Stack Overflow用户

发布于 2022-09-03 22:26:52

代码语言:javascript
复制
# Import Moduel
import pandas as pd
import numpy as np

# Data Preparation and Preprocess
df = pd.DataFrame({'id':['a','b','a','a','c','a','c','b','b','a','a'],
'amount':[30,30,0,0,30,0,0,0,0,0,0]}
)
df['Orig_Index'] = df.reset_index().index
df['Dup_Seq'] = df.groupby(['id']).cumcount()+1
df_required = df.loc[df['Dup_Seq']==1].replace()
df_final = pd.merge(df, df_required[['Orig_Index','Dup_Seq']], left_on='Orig_Index', right_on='Orig_Index', how='left')
df_final['amount_v2'] = np.where(df_final['Dup_Seq_y'] ==1 , 30,0)
df_final.drop(['amount','Orig_Index','Dup_Seq_x','Dup_Seq_y'],axis=1,inplace=True)
df_final.rename(columns = {'amount_v2':'amount'},inplace=True)

# Data Display
df_final

你好弗朗西斯

请试试上面的代码,它会对你有帮助,

如果你有什么问题,请告诉我

谢谢里昂

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73585967

复制
相关文章

相似问题

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