熊猫:有效地将多列添加到新的数据帧

时间:2015-07-18 18:07:33

标签: python pandas

我有一个名为'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次,每次groupbyfillna都有变化。

median_diff = sorted.groupby('bidder_id')['bid_time_diff'].median()
median_diff = median_diff.fillna(median_diff.mean())
features['median_diff'] = median_diff

1 个答案:

答案 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)