熊猫,对于一列中的每个唯一值,在另一列中获得唯一值

Parseltongue:

我有一个数据框,其中每一行都包含与单个Reddit注释有关的各种元数据(例如作者,subreddit,注释文本)。

我要执行以下操作:对于每个作者,我都希望获取他们有注释的所有子注释的列​​表,并将此数据转换为熊猫数据框,其中每一行都对应于一个作者,以及所有唯一子注释的列​​表他们发表评论。

我目前正在尝试以下各项的组合,但无法解决:

尝试1:

group = df['subreddit'].groupby(df['author']).unique()
list(group) 

尝试2:

from collections import defaultdict
subreddit_dict  = defaultdict(list)

for index, row in df.iterrows():
    author = row['author']
    subreddit = row['subreddit']
    subreddit_dict[author].append(subreddit)

for key, value in subreddit_dict.items():
    subreddit_dict[key] = set(value)

subreddit_df = pd.DataFrame.from_dict(subreddit_dict, 
                            orient = 'index')
安全:

这里有两种策略。毫无疑问,还有其他方法。

假设你的数据框看起来事情是这样的(显然有更多列):

df = pd.DataFrame({'author':['a', 'a', 'b'], 'subreddit':['sr1', 'sr2', 'sr2']})

>>> df
  author subreddit
0      a       sr1
1      a       sr2
2      b       sr2
...

解决方案1:groupby

比解决方案2更直接,并且类似于您的第一次尝试:

group = df.groupby('author')

df2 = group.apply(lambda x: x['subreddit'].unique())

# Alternatively, same thing as a one liner:
# df2 = df.groupby('author').apply(lambda x: x['subreddit'].unique())

结果:

>>> df2
author
a    [sr1, sr2]
b         [sr2]

作者是索引,单列是它们活动所在的所有子索引的列表(根据您的描述,这就是我解释您希望输出的方式)。

如果您希望每个子redredit在单独的列中,可能更有用,具体取决于您要执行的操作,您可以在执行以下操作之后:

df2 = df2.apply(pd.Series)

结果:

>>> df2
          0    1
author          
a       sr1  sr2
b       sr2  NaN

解决方案2:遍历数据框

您可以使用所有唯一作者创建一个新的数据框:

df2 = pd.DataFrame({'author':df.author.unique()})

然后只需获取它们处于活动状态的所有唯一子reddit的列表,然后将其分配给新列即可:

df2['subreddits'] = [list(set(df['subreddit'].loc[df['author'] == x['author']])) 
    for _, x in df2.iterrows()]

这给你这个:

>>> df2
  author  subreddits
0      a  [sr2, sr1]
1      b       [sr2]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:从另一列中的每个唯一值中获取一列的最大值

熊猫在唯一值上遍历一列并获得另一列的值

在标准SQL中,如何选择行,以便对于一列中的每个唯一值,另一列中的所有值都是指定值?

sql-对于列样本中的每个唯一值,从另一列获取2个不同的值

根据另一列中的唯一值汇总一列中的值

一列中的值的平均值,另一列中的唯一值

根据另一列中的重复值过滤一列中的唯一值

为另一列中的唯一值的熊猫数据框值赋值

对于另一列的每个唯一值,使用awk获取一列的最大值

在另一列中获取最大值行以获得唯一值:python

Python pandas:对于一列中的每个唯一值,在另一列中找到一个最小值并从另一列的值中减去它

SQL查询以获取另一列中每个唯一值的最大值

在 Pandas 中创建一列,计算另一列中唯一值的数量

根据另一列中的唯一值查找一列中的重复项

基于另一列的一列中唯一值的计数

Pandas 基于另一列 python 获取一列中的唯一值

根据熊猫中的另一列对唯一值进行排序

MySQL为另一列中的每个唯一值选择最新条目

在 R 中,指示另一列的每个 ID 是否具有多个唯一值

每个主键的唯一列值

为列中的每个唯一值生成唯一列

如何基于另一列的唯一值获取一列的唯一值

计算 PySpark 中给定另一列的唯一列值

从熊猫数据框中另一列的每个唯一值的范围内的列中找到一个固定值

在熊猫中,如何从一列中的唯一值中创建列,然后根据另一列中的值填充它?

将一列的每个唯一值与其他列R中的每个唯一值求和

EXCEL 公式计算每个值出现在另一列中每个唯一 ID 的列中的次数

在1列中列出唯一值,并在另一列中串联相应的值

合并第二列中的所有数据,以获得第一列中的每个唯一值