我有一个ID和日期为pandas的数据框:
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)
我想遍历每个日期,并使用value列进行一些计算以获取Adjusted_value列:
for idx, daily_df in test_df.groupby('date'):
daily_df['adj_value'] = some functions
我有两个问题:
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
答案 0 :(得分:0)
无需遍历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