我有一个名为'features'的DataFrame,我已经添加了一列我一次计算过的新列。
例如像这样
features['max_diff'] = max_diff
然后这个:
features['median_diff'] = median_diff
等等。
回顾我创建的22个新列并逐行添加,我想知道是否有办法更有效地添加和命名每个新列。
我知道我可以执行以下操作(但这只是在一行中编写的长度完全相同)。
features['max_diff'], features['median_diff'] = max_diff, median_diff
有没有办法引用DataFrame功能1次而不是22次(对于22个新列)并添加所有新列?
我在想这样的事情(这显然不起作用)。
features['max_diff', 'median_diff'] = [max_diff, median_diff]
(...添加所有22列)
可能还有一种方法可以通过循环或apply
执行此操作,但是不能想到如何。
根据评论更新。
我基本上这样做22次,每次groupby
或fillna
都有变化。
median_diff = sorted.groupby('bidder_id')['bid_time_diff'].median()
median_diff = median_diff.fillna(median_diff.mean())
features['median_diff'] = median_diff
答案 0 :(得分:1)
你可以pass a dict to SeriesGroupBy.agg
。 dict的键成为结果中的列,值可以是callables或常用统计信息的名称(例如'min'
,'max'
,'mean'
,'median'
,{ {1}},'prod'
,'std'
,'var'
,'sum'
,'size'
,'first'
)。例如,
'last'
产量
import numpy as np
import pandas as pd
np.random.seed(2015)
N = 100
sorted = pd.DataFrame(np.random.randint(10, size=(N,2)),
columns=['bidder_id', 'bid_time_diff'])
# Add some NaNs to `sorted` to show the effect of `fillna`
mask = sorted['bidder_id'] == 0
sorted.loc[mask, 'bid_time_diff'] = np.nan
grouped = sorted.groupby('bidder_id')['bid_time_diff']
features = grouped.agg({'median_diff':'median', 'max_diff':'max'})
features = features.fillna(features.mean())
print(features)