如何计算Python熊猫数据框中选择值的频率

用户名

我有一个包含两列的数据框,一列用于名称,一列用于字符串值。我试图按名称计算选择字符串值的频率。

我已经尝试过pandas.pivot_table和pandas.DataFrame.groupby,但是我想创建一个全新的数据框而不是聚合。

例如,我有一个数据框:

import pandas as pd
import numpy as np

data = np.array([['John', 'x'], ['John', 'x'], ['John', 'x'], ['John', 'y'], ['John', 'y'], ['John', 'a'], 
                 ['Will', 'x'], ['Will', 'z']])

df = pd.DataFrame(data, columns=['name','str_value'])
df

结果是:

   name      str_value
0  John              x
1  John              x
2  John              x
3  John              y
4  John              y
5  John              a
6  Will              x
7  Will              z

预期结果将是:

   name        x        y        z
0  John        3        2        0 
1  Will        1        0        1  

另外:

   name        x        y        z
0  John     True     True    False 
1  Will     True    False     True   

我只想选择x,y,z,然后根据返回值是0还是NaN返回True或False。

编辑:谢谢你的答案。这些效果很好,但是输出具有子组“ str_value”:

str_value     x      y      z
name
John       True   True  False
Will       True  False   True

有没有办法删除它,所以我在同一级别上有“名称”,“ x”,“ y”,“ z”?使用.reset_index()我得到:

str_value  name     x      y      z
0          John  True   True  False
1          Will  True  False   True

我的索引名称现在是“ str_value”吗?我可以重命名或删除它吗?

亚历山大·B

你可以试试:

df.groupby(["name", "str_value"]).size().unstack()[['x', 'y', 'z']].gt(0)

说明

  1. 每计数的发生name,并str_valuegroupbysize
print(df.groupby(["name", "str_value"]).size())
# John  a            1
#       x            3
#       y            2
# Will  x            1
#       z            1
# dtype: int64
  1. 与拆箱 unstack
print(df.groupby(["name", "str_value"]).size().unstack())
# str_value    a    x    y    z
# name
# John       1.0  3.0  2.0  NaN
# Will       NaN  1.0  NaN  1.0
  1. 选择所需的列:
print(df.groupby(["name", "str_value"]).size().unstack()[['x', 'y', 'z']])
# str_value    x    y    z
# name
# John       3.0  2.0  NaN
# Will       1.0  NaN  1.0
  1. 将大于0的值与进行比较gt
result = df.groupby(["name", "str_value"]).size().unstack()[['x', 'y', 'z']].gt(0)
print(result)
# str_value     x      y      z
# name
# John       True   True  False
# Will       True  False   True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算熊猫数据框中选定列(包括频率为0的值)中值的唯一组合?

如何从熊猫数据框中选择的列表中检查值?

如何从熊猫数据框中选择的列表中检查值?

如何计算熊猫数据框中列值更改的频率

如何计算熊猫数据框中列值更改的频率?

如何在值的频率上分割熊猫数据框

如何计算熊猫数据框中的值

在熊猫数据框中选择所有大于数字的值

如何从熊猫数据框中选择部分数据

如何在多索引熊猫数据框中选择大于某个值的像元?

熊猫:在分组的数据框中选择的日期是一天频率的倍数?

如何计算数据框列中重复值的频率?

如何在多头熊猫数据框中选择顶级列

如何从熊猫的数据框中选择某些行

在熊猫数据框中选择行时如何保持顺序?

如何在熊猫数据框中选择多个行范围

如何从熊猫数据框中选择几年中的季节/月份?

如何在熊猫数据框中选择数字列

如何从熊猫数据框中的列表中选择“本地人”最小值和最大值

熊猫计算另一个数据框列中列值的频率

根据存储在不同数据框中的行和列标签从熊猫数据框中选择值

熊猫:无法从数据框中选择行

在熊猫数据框中选择行

从熊猫的数据框中选择Vlaues

从熊猫数据框中选择特定的行

熊猫:从数据框中选择列

如何从Python数据框的多个列中选择所有非NULL值

Python - 在数据框中选择最小值

从熊猫数据框中的类别(列)中选择前n行,并对其进行计算