【发布时间】:2016-09-05 15:17:49
【问题描述】:
首先让我说我是熊猫新手。
我正在尝试在 DataFrame 中创建一个新列。我能够做到这一点,如我的示例所示。但我想通过链接方法来做到这一点,所以我不必分配新变量。让我先展示一下我想要实现的目标,以及到目前为止我做了什么:
In [1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
In [2]:
np.random.seed(10)
df=pd.DataFrame(np.random.randint(1,5,size=(10, 3)), columns=list('ABC'))
df
Out [2]:
A B C
2 2 1
4 1 2
4 1 2
2 1 2
2 3 1
2 1 3
1 3 1
4 1 1
4 4 3
1 4 3
In [3]:
filtered_DF = df[df['B']<2].copy()
grouped_DF = filtered_DF.groupby('A')
filtered_DF['C_Share_By_Group'] =filtered_DF.C.div(grouped_DF.C.transform("sum"))
filtered_DF
Out [3]:
A B C C_Share_By_Group
4 1 2 0.4
4 1 2 0.4
2 1 2 0.4
2 1 3 0.6
4 1 1 0.2
我想通过链接方法来达到同样的目的。在带有 dplyr 包的 R 中,我可以执行以下操作:
df %>%
filter(B<2) %>%
group_by(A) %>%
mutate('C_Share_By_Group'=C/sum(C))
在pandas documentation 中它说R(dplyr) 中的mutate 等于pandas 中的assign,但assign 不适用于分组对象。
当我尝试将某些内容分配给分组数据框时,出现错误:
“AttributeError: 无法访问‘DataFrameGroupBy’对象的可调用属性‘assign’,尝试使用‘apply’方法”
我尝试了以下方法,但不知道如何添加新列,或者是否可以通过链接方法来实现:
(df.loc[df.B<2]
.groupby('A')
#****WHAT GOES HERE?**** apply(something)?
)
【问题讨论】:
-
欢迎来到从函数式编程到命令式编程的悲伤世界。您可以在 Python 中使用转换
标签: python python-2.7 pandas dataframe