我有一个pandas数据帧。
DF:
col1 col2 col3 col4 col5
0 1.0 1.0 NaN NaN 1.0
1 NaN 1.0 1.0 2.0 1.0
2 2.0 NaN 1.0 NaN 1.0
我想得到每列具有相同数据的行数,如下所示。
输出:
col1 col2 col3 col4 col5
1.0 1 2 2 0 3
2.0 1 0 0 1 0
或仅计算值。
col1 col2 col3 col4 col5
1.0 1 2 2 0 3
有没有办法获得我预期的输出?
答案 0 :(得分:0)
编辑: df.replace(np.NaN,0)在版本之间无法可靠地运行,因此更新为使用df.fillna(0)。
要计算每列中值的出现次数,请使用value_counts。非出现的值变为NaN,因此需要替换为0:
>>> df.apply(pd.value_counts).fillna(0)
col1 col2 col3 col4 col5
1 1 2 2 0 3
2 1 0 0 1 0
要检索特定行:
>>> df.apply(pd.value_counts).fillna(0).loc[1:1]
col1 col2 col3 col4 col5
1 1 2 2 0 3
答案 1 :(得分:0)
您可以使用value_counts
pandas系列方法,然后fillna
使用NaN
填充0
值:
In [7]: df
Out[7]:
col1 col2 col3 col4 col5
0 1.0 1.0 NaN NaN 1.0
1 NaN 1.0 1.0 2.0 1.0
2 2.0 NaN 1.0 NaN 1.0
In [8]: df.apply(lambda x: x.value_counts()).fillna(0)
Out[8]:
col1 col2 col3 col4 col5
1.0 1 2.0 2.0 0.0 3.0
2.0 1 0.0 0.0 1.0 0.0
如果您需要int
值而不是浮点数,那么您也可以将astype
与int
一起使用:
In [9]: df.apply(lambda x: x.value_counts()).fillna(0).astype(int)
Out[9]:
col1 col2 col3 col4 col5
1.0 1 2 2 0 3
2.0 1 0 0 1 0