在做groupby('A')之前,我有一个这样的系列,我想看看这些组之间的组成差异:
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
...有没有人能帮我看看组的变化?我需要的内容如下:
us [air,gas,sun,fog,mud]
eu [air,gas,sun,fog]
fr [air,bug,sun,mud]非常感谢,非常感谢您的帮助。
--更新
我想看看是不是每天都有相同的作文。当我尝试groupby('MonitorDate')['ItemEngName'].unique()时,它不能很好地工作
提前谢谢。
--更新
感谢@Perl。df.groupby('MonitorDate')['ItemEngName'].apply(list)起作用了。但这不是我想要的。我想要的是在一天内得到一个独特的组合(比如set)。类似于使用set( groupby后的‘ItemEngName’。
所以我尝试了df.groupby('MonitorDate')['ItemEngName'].unique()并得到了
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
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对于更多的数据情况,更复杂的条件如下:
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()来知道不同数量的项目,而不能知道组件的区别。有没有什么有效的方法?
发布于 2021-04-05 00:29:58
您可以使用groupby A列,然后获取B列,并使用apply将分组的值转换为列表
df.groupby('A')['B'].apply(list)输出:
A
fr [air, bug, sun, mud]
us [air, gas, sun, fog, mud]
Name: B, dtype: object如果列表可能有重复,而您只对唯一值感兴趣,那么最好的选择可能是使用@anky的注释中的解决方案:
df.groupby('A')['B'].unique()更新:除了2010/1/7没有WS_HR之外,数据集中的几乎相同
df[['MonitorDate', 'ItemEngName']].value_counts().unstack()输出:
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
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()输出:

https://stackoverflow.com/questions/66943429
复制相似问题