Pandas:数组系列中的列

2024-05-29 06:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列numpy数组,并想从中创建一个dataframe列。具体来说,我有一个数据帧,看起来像这样:

In [298]: df = pd.DataFrame({'name': ['A','A','B','B'], 'value': [1,2,3,4]})

In [299]: df
Out[299]: 
  name  value
0    A      1
1    A      2
2    B      3
3    B      4

我现在计算每个‘名称’的累积积分,如下所示:

In [300]: g = df.groupby('name')

In [301]: r = g.apply(lambda x: np.insert(integrate.cumtrapz(x.value), 0, [0]))

In [302]: r
Out[302]: 
name
A    [0.0, 1.5]
B    [0.0, 3.5]
dtype: object

r的类型和r的元素为:

In [303]: type(r)
Out[303]: pandas.core.series.Series

In [304]: type(r[0])
Out[304]: numpy.ndarray

我想将此结果添加到原始数据帧中,以实现:

In [308]: df['cumint'] = np.append(r[0], r[1])

In [309]: df
Out[309]: 
  name  value  cumint
0    A      1     0.0
1    A      2     1.5
2    B      3     0.0
3    B      4     3.5

实现这个结果的最佳方法是什么。你知道吗


Tags: 数据nameinnumpy名称dataframedfvalue
2条回答

您的系列包含numpy数组,因此您可以concatenate将系列的元素放入一个长numpy数组中,并将新列设置为此数组:

df['cumint'] = np.concatenate(r, axis=0)

结果:

>> print(df)
  name  value  cumint
0    A      1     0.0
1    A      2     1.5
2    B      3     0.0
3    B      4     3.5

您可以在这里使用transform而不是apply来获得一系列结果:

df['cumint']=(df.groupby('name')['value'].
          transform(lambda x: np.insert(integrate.cumtrapz(x), 0, [0])))
#or df['cumint']= g['value'].transform(lambda x: np.insert(integrate.cumtrapz(x), 0, [0]))
print(df)

  name  value  cumint
0    A      1     0.0
1    A      2     1.5
2    B      3     0.0
3    B      4     3.5

相关问题 更多 >

    热门问题