我有一个现有的Pandas数据框,我想根据以下模式进行操作:
现有表在“代码”列中具有不同的代码集。每个“代码”在“标签”列中列出了某些标签。每个标签都标记有0或1。
我需要为每组“代码”添加一个值为0或1的“ new_column”,具体取决于以下条件:
仅当特定“代码”的所有“标签”都填入“ new_column”中的1 “标签”列中的值等于1。注意,我需要为属于该特定“代码”的所有行填充1。
如所需表中所示,只有code = 30的“ tag”列中设置的所有“标签”都等于1。因此,对于该特定代码,我将“ new_column”设置为1。其余代码已设置为0值。
code label tag
0 10 AAA 0
1 10 BBB 1
2 10 CCC 0
3 10 DDD 0
4 10 EEE 0
5 20 AAA 1
6 20 CCC 0
7 20 DDD 1
8 30 BBB 1
9 30 CCC 1
10 30 EEE 1
code label tag new_column
0 10 AAA 0 0
1 10 BBB 1 0
2 10 CCC 0 0
3 10 DDD 0 0
4 10 EEE 0 0
5 20 AAA 1 0
6 20 CCC 0 0
7 20 DDD 1 0
8 30 BBB 1 1
9 30 CCC 1 1
10 30 EEE 1 1
我尚未尝试任何解决方案,因为它似乎超出了我目前的专业水平。
答案 0 :(得分:1)
我认为这个问题的正确答案是@ user3483203在评论中给出的答案:
df['new_column'] = df.groupby('code')['tag'].transform(all).astype(int)
transform方法适用于传递给数据帧的任何数据帧,并保持轴长相同。
文档中的简单示例清楚地说明了用法。
出现此特定问题时,运行此代码段会发生以下情况:
DataFrameGroupBy
对象。 tag
列,最后以SeriesGroupBy
对象结束。 all
应用transform
函数,最终将布尔值类型转换为int
。 >>> int(all([1, 1, 1, 1]))
1
>>> int(all([1, 0, 1, 1]))
0
最后,您要将刚创建的列分配给旧数据框的列new_column
。
答案 1 :(得分:0)