【问题标题】:Python, Merging rows with the same id - date but different values in one columnPython,合并具有相同id的行 - 日期但在一列中具有不同的值
【发布时间】:2020-12-23 18:37:18
【问题描述】:

我选择了提及和未提及“Korona”的行,并按日期对它们进行计数。有些日期没有 Korona True。 数据框如下所示:

表 1

Published_date Korona Count
242 2020-06-01 False 13
243 2020-06-01 True 3
244 2020-06-02 False 7
245 2020-06-02 True 1
246 2020-06-03 False 11
247 2020-06-04 False 8
248 2020-06-04 True 1
249 2020-06-05 False 10
250 2020-06-06 False 5
251 2020-06-07 False 5
252 2020-06-08 False 14

我想要做的是删除重复的日期行,但将值转换为另一列。比如这个:

Published_date Korona Count
242 2020-06-01 False 13
243 2020-06-01 True 3

看起来像这样(在对列进行了一些重命名并添加了 Count-All 列之后):

表 2

Published_date Count-NoKorona Count-Korona Count-All
152 2020-06-01 13 3 16

我正在使用这段代码(在 Python, Merging rows with same value in one column 上找到它):

df = df.set_index(['Published_date', df.groupby('Published_date').cumcount()])['Count'].unstack().add_prefix('Count').reset_index()

问题: 出于某种原因,在那行代码之后,我的数据变得混乱了。

在那条线之前一切都很好。我有 782 个 Korona True 行(对于测试,我只从表 1 中取出“True”行,并总结了它的计数,它是正确的 --> 782)。所以 782/3443 是真的。

在代码行之后,我得到了 1011/3443 的总和。

我猜它需要一些错误的日期值,或者它被混淆了,但我不知道如何修复它,并且数据表太大而无法手动找到错误来尝试理解问题更好。

如果有任何帮助,我将不胜感激。 (如果问题看起来不太好,也很抱歉,这是我的第一个问题:D)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用数据透视表试试这个

    d = ''' Published_date  Korona  Count
    242 2020-06-01  False   13
    243 2020-06-01  True    3
    244 2020-06-02  False   7
    245 2020-06-02  True    1
    246 2020-06-03  False   11
    247 2020-06-04  False   8
    248 2020-06-04  True    1
    249 2020-06-05  False   10
    250 2020-06-06  False   5
    251 2020-06-07  False   5
    252 2020-06-08  False   14'''
    
    df = pd.read_csv(io.StringIO(d), sep='\s+', engine='python')
    
    # pivot the data and reset the index
    df1 = pd.pivot_table(df, values='Count', index=['Published_date'],
                        columns=['Korona'], aggfunc=np.sum, fill_value=0).reset_index()
    # rename the columns to what you want
    df1.columns = ['Published_date', 'Count-NoKorona', 'Count-Korona']
    # sum the values into a new column
    df1['Count-All'] = df1[['Count-NoKorona', 'Count-Korona']].sum(axis=1)
    

    输出:

      Published_date  Count-NoKorona  Count-Korona  Count-All
    0     2020-06-01              13             3         16
    1     2020-06-02               7             1          8
    2     2020-06-03              11             0         11
    3     2020-06-04               8             1          9
    4     2020-06-05              10             0         10
    5     2020-06-06               5             0          5
    6     2020-06-07               5             0          5
    7     2020-06-08              14             0         14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-31
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多