Python 新手。我来自 SQL 世界,习惯于运行查询并应用它们。获取事物列表,获取它们的计数,然后使用该计数的子集(例如前 5 个)并将其应用到其他数据,这很方便。对于 Python/Pandas,我仍然没有完全理解这个过程。举例来说:
一个简单的数据集:
`import pandas as pd
dataset = (
[1,2,3,4,5,6],
[1,None,3,4,5,6],
[1,None,3,4,5,6],
[1,2,None,4,5,6],
[1,None,3,None,5,6],
[1,2,None,4,5,6],
[1,None,3,None,5,6],
[1,2,3,4,5,None],
[1,2,3,4,5,None]
)
df = pd.DataFrame(dataset, columns=['A','B','C','D','E','F'])`
然后创建一个数据框来查找 NaN:
nan_df = df.isna()
然后统计每一行的实例数:
grouped_nan = nan_df.groupby(['A','B', 'C', 'D','E', 'F'], sort=True).value_counts()
我工作的原始集合有大约 200 行。这个简化的例子产生了这个:
A B C D E F
False False False False False False 1
True 2
True False False False 2
True False False False False 2
True False False 2
Name: count, dtype: int64
这就是我遇到麻烦的地方。我想做的事情最好在Dataframe中完成(上面是一个Series)。以下内容使其成为 DataFrame:
grouped_nan_df = grouped_nan.to_frame()
但它并没有以我可以管理的方式带来最后一列(计数)。我可以看到它,但我无法用它做任何事情。
如果我尝试引用包含计数的列,它无法识别它。
如果我尝试重命名最后一列,它不起作用:
`grouped_nan_df.rename(columns={grouped_nan_df.columns[5]:"new_count"}, inplace=True)`
给出错误“索引 5 超出尺寸 1 的轴 0 的范围”。
最后我想要的是一个包含计数的 DataFrame。有办法到达吗?
任何帮助表示赞赏!
安迪
IIUC,你可以只使用
groupby
和 as_index=False
然后组队 size
:
out = nan_df.groupby(['A','B', 'C', 'D','E', 'F'], as_index=False).size()
输出:
A B C D E F size
0 False False False False False False 1
1 False False False False False True 2
2 False False True False False False 2
3 False True False False False False 2
4 False True False True False False 2