计算熊猫系列的花车中的出现次数

时间:2018-07-11 06:44:43

标签: python pandas counter series

我有一个DataFrame:

df.head()

Index                          Value
0                    1.0,1.0,1.0,1.0
1                            1.0,1.0
2                            1.0,1.0
3    3.0,3.0,3.0,3.0,3.0,3.0,4.0,4.0
4                                  4

我想计算Value列中值的出现次数:

Index                          Value   1    2    3    4
0                    1.0,1.0,1.0,1.0   4    0    0    0
1                            1.0,1.0   2    0    0    0
2                            1.0,1.0   2    0    0    0
3    3.0,3.0,3.0,3.0,3.0,3.0,4.0,4.0   0    0    6    2
4                                  4   0    0    0    1

我以前使用字符串值完成了此操作,但是我使用了Counter-我发现您不能将其与浮点数一起使用?

df_counts = df['Value'].apply(lambda x: pd.Series(Counter(x.split(','))), 1).fillna(0).astype(int)

1 个答案:

答案 0 :(得分:2)

使用map进行浮动,最后一列到达integers

df_counts = (df['Value'].apply(lambda x: pd.Series(Counter(map(float, x.split(',')))), 1)
                        .fillna(0)
                        .astype(int)
                        .rename(columns=int))
print (df_counts)
   1  3  4
0  4  0  0
1  2  0  0
2  2  0  0
3  0  6  2
4  0  0  1

如果需要,最后添加所有缺失的类别,将reindexjoin添加到原始位置:

cols = np.arange(df_counts.columns.min(), df_counts.columns.max() + 1)
df = df.join(df_counts.reindex(columns=cols, fill_value=0))
print (df)
                                 Value  1  2  3  4
Index                                             
0                      1.0,1.0,1.0,1.0  4  0  0  0
1                              1.0,1.0  2  0  0  0
2                              1.0,1.0  2  0  0  0
3      3.0,3.0,3.0,3.0,3.0,3.0,4.0,4.0  0  0  6  2
4                                    4  0  0  0  1