【发布时间】:2022-02-20 22:24:42
【问题描述】:
我需要创建一个函数,它将输入作为字典并更新数据框中的列值。我的数据如下所示
| Date | Col_1 | Col_2 | Col_3 | Col_4 | Col_5 |
|---|---|---|---|---|---|
| 01/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 02/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 03/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 04/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 05/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 06/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 07/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 08/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 09/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 10/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 11/01/2021 | 10 | 20 | 10 | 20 | 10 |
| 12/01/2021 | 10 | 20 | 10 | 20 | 10 |
现在,如果通过“Col_1”和“Col_2”的每月级别更新百分比,比如说
{Date: ['01/01/2021','02/01/2021','03/01/2021','04/01/2021','05/01/2021','06/01/2021',
'07/01/2021','08/01/2021','09/01/2021','10/01/2021','11/01/2021','12/01/2021',],
'Col_1': [20,20,20,20,30,30,40,40,20,20,20,20],
'Col_2': [0,0,0,0,0,0,0,0,0,0,10,10]}
执行此操作后,我想要的每月变化如下所示
| Date | Col_1 | Col_2 | Col_3 | Col_4 | Col_5 |
|---|---|---|---|---|---|
| 01/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 02/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 03/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 04/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 05/01/2021 | 13 | 20 | 10 | 20 | 10 |
| 06/01/2021 | 13 | 20 | 10 | 20 | 10 |
| 07/01/2021 | 14 | 20 | 10 | 20 | 10 |
| 08/01/2021 | 14 | 20 | 10 | 20 | 10 |
| 09/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 10/01/2021 | 12 | 20 | 10 | 20 | 10 |
| 11/01/2021 | 12 | 24 | 10 | 20 | 10 |
| 12/01/2021 | 12 | 24 | 10 | 20 | 10 |
同样,我也想更新我的季度和年度数据。我能够进行年度更新,这是我的代码。请根据输入帮助我进行每月和每季度的更新。
谢谢!!
dic = {'col_1':10,'col_2':-5)
year = 2021
def update_df(dic,df,year):
df = df[df['date'].dt.year == year]
df = (df+df.select_dtypes(include = 'number').mul(pd.Series(dic)/100)).combine_first(df)[df.columns]
return df
我正在尝试这样
def update_df(dic,df,year,choice):
if choice == annual:
df = df[df['date'].dt.year == year]
df = (df+df.select_dtypes(include =
'number').mul(pd.Series(dic)/100)).combine_first(df)[df.columns]
elif choice == quarterly :
df["quarter"] = df.date.dt.quarter
df = (df+df.select_dtypes(include =
'number').mul(pd.Series(dic)/100)).combine_first(df)[df.columns]
else choice == monthly :
df["month"] = df.date.dt.month
df = (df+df.select_dtypes(include =
'number').mul(pd.Series(dic)/100)).combine_first(df)[df.columns]
return df
【问题讨论】:
-
这不是代码编写或辅导服务。我们可以帮助解决具体的技术问题,而不是对代码或建议的开放式请求。请编辑您的问题以显示您迄今为止尝试过的内容,以及您需要帮助的具体问题。详情请见:Why is Can someone help me? not an actual question?。
-
我确实尝试过在现有的 pandas 数据框中进行年度更新,并且它有效,我预先编写了它。我只想按月(在带有时间戳的指定列中更改 12 个百分比值)和季度级别(在带有时间戳的指定列中更改 4 个百分比值)执行此操作。 p.s.我没有要求任何辅导,我只需要一些帮助。祝你有美好的一天:)
-
您的编码尝试在哪里,您遇到了什么具体问题。请为您的问题提供完整的相关Minimal Reproducible Example
-
请在您的问题中发布您的代码。编辑问题并添加代码。
-
@itprorh66 现在对你有用吗?
标签: python pandas dataframe data-manipulation data-munging