熊猫数据框列表列,每行都有一些值

时间:2021-04-26 08:33:20

标签: python dataframe

我有一个包含 400 多列的数据集,其中第一列是公司标识符,第二列是文章标识符,其他的是文章的一些属性。有 > 50.000 家公司,每家公司最多 1.000 篇文章。对于大多数公司而言,所有文章的属性值(对我来说很重要)都是相同的,但并非对所有文章都相同。 我正在使用 python 数据框来分析数据。 我想添加一个列,其中列出了每个公司的所有不同列。

示例(为文章和公司使用整数以便于阅读):

import pandas as pd
df = pd.DataFrame({'company':[1,1,2,2,3,3], 'article':[1,2,1,2,1,2], 'col1':[1,1,2,2,3,3], 'col2':[1,2,3,3,4,4], 'col3':[1,2,3,3,4,5] })
diff = df.groupby('company').nunique()
diff['diff_columns'] = ???
diff[['company', 'diff_columns']]

结果应该是这样的:

company   diff_columns
1         ['col2', 'col3']
2         []
3         ['col3']

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以计算每列中的值。然后使用 itertools.compress() 按布尔列表过滤列表。

import itertools

columns_to_diff = ['col1', 'col2', 'col3']

diff = df.groupby('company').apply(lambda group: list(itertools.compress(columns_to_diff, [(len(group[col].value_counts()) != 1) for col in columns_to_diff])))
print(diff.to_frame('diff_columns'))

         diff_columns
company              
1        [col2, col3]
2                  []
3              [col3]