Python 根据行值将函数应用于列中的列
假设我有以下数据帧:Python 根据行值将函数应用于列中的列,python,pandas,Python,Pandas,假设我有以下数据帧: date,id,value 1/1/2017,5,300 1/1/2017,51,300 1/1/2017,54,300 1/2/2017,5,100 1/2/2017,51,100 1/2/2017,54,100 我有一个字典映射id到一个调整因子,如下所示: {5: 20, 51: 23.5, 54:10} 我想将id对应的因子添加到我的dataframe中的value列中,结果是: date,id,value,adjusted_value 1/1/2017,5,3
date,id,value
1/1/2017,5,300
1/1/2017,51,300
1/1/2017,54,300
1/2/2017,5,100
1/2/2017,51,100
1/2/2017,54,100
我有一个字典映射id到一个调整因子,如下所示:
{5: 20, 51: 23.5, 54:10}
我想将id对应的因子添加到我的dataframe中的value列中,结果是:
date,id,value,adjusted_value
1/1/2017,5,300,300+20=320
1/1/2017,51,310,310+23.5=333.5
1/1/2017,54,320,320+10=330
1/2/2017,5,110,110+20=130
1/2/2017,51,120,120+23.5=143.5
1/2/2017,54,130,130+10=140
有没有一种简单的方法可以做到这一点?我想您正在寻找ngroup、cumcount和mapping,即
x = df.groupby('date')
d = {5: 20, 51: 23.5, 54: 10}
df['new'] = (x.cumcount()+x.ngroup())*10 +df['id'].map(d)+df['value']
输出:
date id value new
0 1/1/2017 5 300 320.0
1 1/1/2017 51 300 333.5
2 1/1/2017 54 300 330.0
3 1/2/2017 5 100 130.0
4 1/2/2017 51 100 143.5
5 1/2/2017 54 100 140.0
一艘班轮:
df['adjusted_value'] = df.apply(lambda x: dictionary[x['id']] + x['value'] , axis=1)
更详细的:
df['adjusted_value'] = [dictionary[i] for i in df['id']]
df['adjusted_value'] = df['adjusted_value'] + df['value']
(x.cumcount()+x.ngroup())*10 +df['value']
0 300
1 310
2 320
3 110
4 120
5 130
dtype: int64
df['adjusted_value'] = df.apply(lambda x: dictionary[x['id']] + x['value'] , axis=1)
df['adjusted_value'] = [dictionary[i] for i in df['id']]
df['adjusted_value'] = df['adjusted_value'] + df['value']