Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在每个组的整列一致时,使用groupby并仅获取值_Python_Pandas Groupby - Fatal编程技术网

Python 在每个组的整列一致时,使用groupby并仅获取值

Python 在每个组的整列一致时,使用groupby并仅获取值,python,pandas-groupby,Python,Pandas Groupby,我有一个由两个不同ID的项组成的数据框架。id1和id2,其中id2是真正唯一的,可以有多个id2对一个id1。项目功能特定于id2s df=pd.DataFrame([[11112345,“A”,“red”,“big”], [11112399,“A”,“红色”,“小”], [222345,“B”,“红色”,“小”], [222349,“B”,“蓝色”,“小”], 列=[“id1”、“id2”、“功能1”、“功能2”、“功能3”] 我想按id1分组,并在列中获取cponsistent值,只有当

我有一个由两个不同ID的项组成的数据框架。id1和id2,其中id2是真正唯一的,可以有多个id2对一个id1。项目功能特定于id2s

df=pd.DataFrame([[11112345,“A”,“red”,“big”],
[11112399,“A”,“红色”,“小”],
[222345,“B”,“红色”,“小”],
[222349,“B”,“蓝色”,“小”],
列=[“id1”、“id2”、“功能1”、“功能2”、“功能3”]
我想按id1分组,并在列中获取cponsistent值,只有当组中的所有行在该列中具有相同的值时,否则为NaN。因此,上述示例中的预期结果是:

     id2    feature1    feature2    feature3
id1
111  NaN    A           red         NaN
222  NaN    B           NaN         small
我已经编写了此函数,希望将其应用于分组对象,但它不是这样工作的:

def一致性(系列):
如果series.nunique()==1:
return series.iloc[0]
其他:
返回np.nan
df1.groupby(“id1”)。适用(一致)
我做错了什么?

请使用以下命令:

df.groupby("id1").apply(lambda x: x.apply(consistent))
您可以尝试以下方法:

import numpy as np
df.groupby("id1").agg(lambda x: np.nan if len(set(x)) != 1 else list(set(x))[0])
此代码的输出为:

id1 id2 feature1    feature2    feature3

111 NaN A   red NaN
222 NaN B   NaN small
希望这有帮助

谢谢!我更喜欢你的答案,因为它比编写额外函数更简洁,但我选择了@Ave799的答案,因为它为我解决了如何正确使用.apply()。
id1 id2 feature1    feature2    feature3

111 NaN A   red NaN
222 NaN B   NaN small