[英]pandas dataframe list columns having some value for each row
我有一个包含 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']
我怎样才能做到这一点?
您可以计算每列中的值。 然后使用itertools.compress()按 boolean 列表过滤列表。
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.