首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按分组行获取唯一值

按分组行获取唯一值
EN

Stack Overflow用户
提问于 2021-04-05 00:26:11
回答 1查看 63关注 0票数 0

在做groupby('A')之前,我有一个这样的系列,我想看看这些组之间的组成差异:

代码语言:javascript
复制
    A    B    C
1  us   air   35
2  us   gas   34
3  us   sun   30
4  us   fog   23
5  us   mud   33
6  fr   air   45
7  fr   bug   15
8  fr   sun   35
9  fr   mud   85
      ...

有没有人能帮我看看组的变化?我需要的内容如下:

代码语言:javascript
复制
us    [air,gas,sun,fog,mud]
eu    [air,gas,sun,fog]
fr    [air,bug,sun,mud]

非常感谢,非常感谢您的帮助。

--更新

data is here

我想看看是不是每天都有相同的作文。当我尝试groupby('MonitorDate')['ItemEngName'].unique()时,它不能很好地工作

提前谢谢。

--更新

感谢@Perl。df.groupby('MonitorDate')['ItemEngName'].apply(list)起作用了。但这不是我想要的。我想要的是在一天内得到一个独特的组合(比如set)。类似于使用set( groupby后的‘ItemEngName’。

所以我尝试了df.groupby('MonitorDate')['ItemEngName'].unique()并得到了

代码语言:javascript
复制
MonitorDate 
2010/1/1    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/2    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/3    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/4    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/5    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/6    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
2010/1/7    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...
Name:     ItemEngName, dtype: object

看起来除了1/7,其他都是一样的。但是我需要手动检查差异。

--更新

预期输出:

再次感谢@perl

代码语言:javascript
复制
MonitorDate 
2010/1/1    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ..., WS_HR]
2010/1/7    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...]
Name:     ItemEngName, dtype: object

对于更多的数据情况,更复杂的条件如下:

代码语言:javascript
复制
MonitorDate 
2010/1/1    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ..., WS_HR] (full)
2010/1/7    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, PM2.5, ...] ..(lack WS_HR)
2010/1/8    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM2.5, ..., WS_HR] .(lack PM10)
2010/1/9    [AMB_TEMP, CO, NO, NO2, NOx, O3, PM10, , ...] .......(lack PM2.5)
...
Name:     ItemEngName, dtype: object

我只能使用df.groupby('MonitorDate')["ItemEngName"].nunique().unique()来知道不同数量的项目,而不能知道组件的区别。有没有什么有效的方法?

EN

回答 1

Stack Overflow用户

发布于 2021-04-05 00:29:58

您可以使用groupby A列,然后获取B列,并使用apply将分组的值转换为列表

代码语言:javascript
复制
df.groupby('A')['B'].apply(list)

输出:

代码语言:javascript
复制
A
fr         [air, bug, sun, mud]
us    [air, gas, sun, fog, mud]
Name: B, dtype: object

如果列表可能有重复,而您只对唯一值感兴趣,那么最好的选择可能是使用@anky的注释中的解决方案:

代码语言:javascript
复制
df.groupby('A')['B'].unique()

更新:除了2010/1/7没有WS_HR之外,数据集中的几乎相同

代码语言:javascript
复制
df[['MonitorDate', 'ItemEngName']].value_counts().unstack()

输出:

代码语言:javascript
复制
ItemEngName  AMB_TEMP   CO   NO  NO2  NOx   O3  PM10  PM2.5   RH  SO2  WD_HR  \
MonitorDate                                                                    
2010/1/1          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/2          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/3          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/4          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/5          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/6          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   
2010/1/7          1.0  1.0  1.0  1.0  1.0  1.0   1.0    1.0  1.0  1.0    1.0   

ItemEngName  WIND_DIREC  WIND_SPEED  WS_HR  
MonitorDate                                 
2010/1/1            1.0         1.0    1.0  
2010/1/2            1.0         1.0    1.0  
2010/1/3            1.0         1.0    1.0  
2010/1/4            1.0         1.0    1.0  
2010/1/5            1.0         1.0    1.0  
2010/1/6            1.0         1.0    1.0  
2010/1/7            1.0         1.0    NaN 

更新2:如果您只是想直观地检查哪些天有哪些项目,您可以绘制它。例如,您可以在此处看到2010/1/7上缺少WS_HR

代码语言:javascript
复制
z = df[['MonitorDate', 'ItemEngName']].value_counts().unstack()
plt.pcolor(z, alpha=0.2)
plt.yticks(np.arange(0.5, len(z.index), 1), z.index)
plt.xticks(np.arange(0.5, len(z.columns), 1), z.columns, rotation=90)
plt.show()

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66943429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档