【问题标题】:Pandas merge conflict rows by counts?熊猫按计数合并冲突行?
【发布时间】:2021-04-28 23:52:43
【问题描述】:

冲突行是两行具有相同的特征但具有不同的标签,如下所示:

feature label
  a       1
  a       0

现在,我想将这些冲突行合并到仅从它们的计数中获取的一个标签。如果我有更多a 1,那么a 将被标记为1。否则,a 应标记为0

我可以通过df1=df.groupy('feature', as_index=Fasle).nunique(),df1 = df1[df1['label]==2]' 找到这些冲突,它们的值按df2 = df.groupby("feature")["label"].value_counts().reset_index(name="counts") 计算。

但是如何在一个 Dataframe (df_conflict = ?) 中找到这些冲突的行及其计数,然后按计数合并它们 (df_merged = merge(df))?

我们以df = pd.DataFrame({"feature":['a','a','b','b','a','c','c','d'],'label':[1,0,0,1,1,0,0,1]}) 为例。

    feature  label
0       a      1
1       a      0
2       b      0
3       b      1
4       a      1
5       c      0
6       c      0
7       d      1

df_conflict 应该是:

feature  label counts
   a      1      2
   a      0      1
   b      0      1
   b      1      1

df_merged 将是:

feature  label 
  a      1      
  b      0         
  c      0      
  d      1      

【问题讨论】:

  • 我需要两个不同的数据框,df_conflict 用于显示 conflit 行及其计数,以及一个新的 df 用于合并结果。
  • 请查看我最新版本的问题。似乎我无法在注释中粘贴多行代码。谢谢!
  • 不确定and then merge them by counts, (df_merged = merge(df))?是什么意思,可以解释更多吗?
  • 当然可以。 df_conflict 似乎与我的想法有些不同。它应该只包含冲突行。同时,我对您如何获得df_merged 感到困惑。它看起来就像给定列的drop_duplicates。 value_counts 如何影响?
  • 在上一个答案中,如果使用 value_counts 值默认排序,因此每个组的第一行具有最大计数。为答案的第二部分添加了答案。

标签: pandas


【解决方案1】:

我认为您需要首先过滤具有 DataFrameGroupBy.nuniqueGroupBy.transform 之前 SeriesGroupBy.value_counts 之前的唯一值计数的组:

df1 = df[df.groupby('feature')['label'].transform('nunique').gt(1)]
df_conflict = df1.groupby('feature')['label'].value_counts().reset_index(name='count')

print (df_conflict)
  feature  label  count
0       a      1      2
1       a      0      1
2       b      0      1
3       b      1      1

第二次获取feature,按最大出现次数获得标签:

df_merged  = df.groupby('feature')['label'].agg(lambda x: x.value_counts().index[0]).reset_index()
print (df_merged)
  feature  label
0       a      1
1       b      0
2       c      0
3       d      1

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2021-06-22
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多