我有以下数据帧:
key1 key2
0 a one
1 a two
2 b one
3 b two
4 a one
5 c two
Run Code Online (Sandbox Code Playgroud)
现在,我想通过key1对数据帧进行分组,并使用值1计算列key2以获得此结果:
key1
0 a 2
1 b 1
2 c 0
Run Code Online (Sandbox Code Playgroud)
我得到通常的计数:
df.groupby(['key1']).size()
Run Code Online (Sandbox Code Playgroud)
但我不知道如何插入条件.
我尝试过这样的事情:
df.groupby(['key1']).apply(df[df['key2'] == 'one'])
Run Code Online (Sandbox Code Playgroud)
但我没有进一步
如果我在这里得到一些帮助,那将是很棒的
问候
我按 A 列对我的数据集进行分组,然后想取 B 列中的最小值和 C 列中的相应值。
data = pd.DataFrame({'A': [1, 2], 'B':[ 2, 4], 'C':[10, 4]})
data
A B C
0 1 4 3
1 1 5 4
2 1 2 10
3 2 7 2
4 2 4 4
5 2 6 6
Run Code Online (Sandbox Code Playgroud)
我想得到:
A B C
0 1 2 10
1 2 4 4
Run Code Online (Sandbox Code Playgroud)
目前我按 A 分组,并创建一个值来指示我将保留在我的数据集中的行:
a = data.groupby('A').min()
a['A'] = a.index
to_keep = [str(x[0]) + str(x[1]) for x in a[['A', 'B']].values]
data['id'] = data['A'].astype(str) + …Run Code Online (Sandbox Code Playgroud) 我想使用 data.groupby.apply() 将函数应用于每个组的 Pyspark Dataframe 的每一行。
我使用了 Grouped Map Pandas UDF。但是我不知道如何向我的函数添加另一个参数。
我尝试使用参数作为一个全局变量,但功能不recongnize它(我的观点是pyspark数据框),
我也试过在这一问题提出的解决方案(大熊猫据帧)使用熊猫GROUPBY()+应用()的参数
@pandas_udf(schema,PandasUDFType.GROUPED_MAP)
def function(key,data, interval):
interval_df=interval.filter(interval["var"]==key).toPandas()
for value in interval_df:
#Apply some operations
return Data.groupBy("msn").apply(calc_diff, ('arg1'))
Run Code Online (Sandbox Code Playgroud)
或者
@pandas_udf(schema,PandasUDFType.GROUPED_MAP)
def function(key,data, interval):
interval_df=interval.filter(interval["var"]==key).toPandas()
for value in interval_df:
#Apply some operations
return Data.groupBy("msn").apply(lambda x: calc_diff(x,'arg1'))
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
ValueError: Invalid function: pandas_udfs with function type GROUPED_MAP 必须采用一个参数 (data) 或两个参数 (key, data)。
任何人都可以帮助我解决上述问题。
谢谢
以下是我的数据框.我做了一些转换来创建类别列并删除它派生自的原始列.现在我需要进行分组删除重复,例如Love,Fashion可以通过groupby总和汇总.
df.colunms = array([category, clicks, revenue, date, impressions, size], dtype=object)
df.values=
[[Love 0 0.36823 2013-11-04 380 300x250]
[Love 183 474.81522 2013-11-04 374242 300x250]
[Fashion 0 0.19434 2013-11-04 197 300x250]
[Fashion 9 18.26422 2013-11-04 13363 300x250]]
Run Code Online (Sandbox Code Playgroud)
这是我创建数据帧时创建的索引
print df.index
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, …Run Code Online (Sandbox Code Playgroud) 我在使用pandas groupby和分类数据时遇到了问题.从理论上讲,它应该是超级高效的:您通过整数而不是字符串进行分组和索引.但它坚持认为,在按多个类别进行分组时,必须考虑每个类别组合.
即使普通字符串密度较低,我有时也会使用类别,因为这些字符串很长并且可以节省内存/提高性能.有时每列中有数千个类别.按3列分组时,pandas强制我们保留1000 ^ 3组的结果.
我的问题:有没有一种方便的方法来使用groupby类别,同时避免这种不愉快的行为?我不是在寻找任何这些解决方案:
numpy.groupby,稍后再恢复为类别.我希望有一种方法可以修改这个特殊的pandas特质.一个简单的例子如下.而不是输出中我想要的4个类别,我最终得到12个.
import pandas as pd
group_cols = ['Group1', 'Group2', 'Group3']
df = pd.DataFrame([['A', 'B', 'C', 54.34],
['A', 'B', 'D', 61.34],
['B', 'A', 'C', 514.5],
['B', 'A', 'A', 765.4],
['A', 'B', 'D', 765.4]],
columns=(group_cols+['Value']))
for col in group_cols:
df[col] = df[col].astype('category')
df.groupby(group_cols, as_index=False).sum()
Group1 Group2 Group3 Value
# A A A NaN
# A A C NaN
# …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我在网络或文档中找不到任何解决方案,即使我认为这是非常微不足道的.
我想做什么?
我有这样的数据帧
CLASS FEATURE1 FEATURE2 FEATURE3
X A NaN NaN
X NaN A NaN
B A A A
Run Code Online (Sandbox Code Playgroud)
我想按标签分组(CLASS)并显示每个功能中计算的NaN值的数量,使其看起来像这样.这样做的目的是大致了解缺失值如何分布在不同的类上.
CLASS FEATURE1 FEATURE2 FEATURE3
X 1 1 2
B 0 0 0
Run Code Online (Sandbox Code Playgroud)
我知道如何收到非空的数量- 价值 -df.groupby['CLASS'].count()
NaN -Values 有类似的东西吗?
我试图从size()中减去count(),但它返回了一个填充了NaN值的无格式输出
假设我们从这个简单的表开始,存储在pandas数据帧中:
name age family
0 john 1 1
1 jason 36 1
2 jane 32 1
3 jack 26 2
4 james 30 2
Run Code Online (Sandbox Code Playgroud)
然后我做
group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})
Run Code Online (Sandbox Code Playgroud)
其中groupby()是名称的简单聚合函数:
def name_join(list_names, concat='-'):
return concat.join(list_names)
Run Code Online (Sandbox Code Playgroud)
输出是:
age name
family
1 23 john-jason-jane
2 28 jack-james
Run Code Online (Sandbox Code Playgroud)
现在的问题.
是否有快速,有效的方法从聚合表中获取以下内容?
name age family
0 john 23 1
1 jason 23 1
2 jane 23 1
3 jack 28 2
4 james 28 2
Run Code Online (Sandbox Code Playgroud)
(注意:数字只是示例,我不关心在此具体示例中取平均值后丢失的信息)
我认为我能做到的方式看起来效率不高:
这应该是一个简单的,但不知何故,我找不到一个有效的解决方案.
我有一个pandas数据框,如下所示:
index col1 col2 col3 col4 col5
0 a c 1 2 f
1 a c 1 2 f
2 a d 1 2 f
3 b d 1 2 g
4 b e 1 2 g
5 b e 1 2 g
Run Code Online (Sandbox Code Playgroud)
我想按col1和col2分组,得到sum()col3和col4. Col5可以删除,因为无法聚合数据.
以下是输出的外观.我有兴趣在结果数据帧中同时使用col3和col4.这并不重要,如果col1和col2是索引与否的一部分.
index col1 col2 col3 col4
0 a c 2 4
1 a d 1 2
2 b d 1 2
3 b …Run Code Online (Sandbox Code Playgroud) 回答这个问题,事实证明,df.groupby(...).agg(set)并且df.groupby(...).agg(lambda x: set(x))正在产生不同的结果.
数据:
df = pd.DataFrame({
'user_id': [1, 2, 3, 4, 1, 2, 3],
'class_type': ['Krav Maga', 'Yoga', 'Ju-jitsu', 'Krav Maga',
'Ju-jitsu','Krav Maga', 'Karate'],
'instructor': ['Bob', 'Alice','Bob', 'Alice','Alice', 'Alice','Bob']})
Run Code Online (Sandbox Code Playgroud)
演示:
In [36]: df.groupby('user_id').agg(lambda x: set(x))
Out[36]:
class_type instructor
user_id
1 {Krav Maga, Ju-jitsu} {Alice, Bob}
2 {Yoga, Krav Maga} {Alice}
3 {Ju-jitsu, Karate} {Bob}
4 {Krav Maga} {Alice}
In [37]: df.groupby('user_id').agg(set)
Out[37]:
class_type instructor
user_id
1 {user_id, class_type, instructor} {user_id, class_type, instructor}
2 …Run Code Online (Sandbox Code Playgroud) 我有可以按预期工作的示例代码段:
import pandas as pd
df = pd.DataFrame(data={'label': ['a', 'b', 'b', 'c'], 'wave': [1, 2, 3, 4], 'y': [0,0,0,0]})
df['new'] = df.groupby(['label'])[['wave']].transform(tuple)
Run Code Online (Sandbox Code Playgroud)
结果是:
label wave y new
0 a 1 0 (1,)
1 b 2 0 (2, 3)
2 b 3 0 (2, 3)
3 c 4 0 (4,)
Run Code Online (Sandbox Code Playgroud)
如果不是,tuple我给出set, frozenset, dict,它会以类似的方式工作,但是如果给出,list我将得到完全出乎意料的结果:
df['new'] = df.groupby(['label'])[['wave']].transform(list)
label wave y new
0 a 1 0 1
1 b 2 0 2
2 b 3 0 3 …Run Code Online (Sandbox Code Playgroud) pandas-groupby ×10
python ×10
pandas ×9
dataframe ×4
group-by ×4
multi-index ×1
numpy ×1
pyspark ×1
transform ×1