python - pandas dataframe update values using groupby
问题描述
I have a pandas dataframe with id and date:
data = [{'id': 'a', 'date': 1, 'value':3}, {'id':'b', 'date': 1, 'value': 30},
{'id': 'a', 'date': 2, 'value':5}, {'id':'b', 'date': 2, 'value': 20}]
test_df = pd.DataFrame(data)
I want to loop over each date and do some calculation with value column to get an adjusted_value column:
for idx, daily_df in test_df.groupby('date'):
daily_df['adj_value'] = some functions
I have two questions:
- I am getting a warning from this:
A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
- I want to add the adj_value column to the original test_df
解决方案
无需循环遍历groupby()
结果。 NamedAgg()
做你想做的事。出于示例的目的,我已经合成了一个函数,通常我会使用内置函数或lambda
函数
data = [{'id': 'a', 'date': 1, 'value':3}, {'id':'b', 'date': 1, 'value': 30},
{'id': 'a', 'date': 2, 'value':5}, {'id':'b', 'date': 2, 'value': 20}]
test_df = pd.DataFrame(data)
def myfunc(x):
x = list(x)
if len(x)>1: return x[0] * x[1]
else: return x[0]
test_df.groupby("date").agg(adj_value=pd.NamedAgg(column="value", aggfunc=myfunc))
输出
adj_value
date
1 90
2 100
推荐阅读
- c - 如果 fclose() 失败,文件描述符是否仍然打开?
- r - Knitr 上的自定义语言引擎
- c++ - 如何在 C++ 中打印动态数组我需要解释这个问题
- docker - 文件存在于 Singularity 容器中,但在执行时不会产生此类文件错误
- javascript - 合约部署后 Ganache 不更新账户余额
- c# - 侧边菜单的图像存储在哪里?
- php - 如何按日期顺序确定记录的编号
- uipath - 阻止用户与 UiPath 机器人交互
- amazon-web-services - 如何修复 AWS code-build apt-get update exit status 100 以使反应应用程序上传到 s3
- python - 将二维数组包装为元组