Python Pandas 条件标记

标签 python pandas if-statement conditional-statements

使用 python pandas dataframe df:

product_id |transaction_id | category | color
234          54              A           black
349          54              B           silver
213          46              A           silver
490          46              A           black
245          87              A           black
249          87              B           black
294          87              A           silver

我想用相同的颜色标记具有 A 和 B 类别的 transaction_ID。因此,在上述场景中,交易 87 的产品 A 为黑色,产品 B 为黑色。

期望的输出:

product_id |transaction_id | category | color  | flag
234          54              A           black
349          54              B           silver
213          46              A           silver
490          46              A           black
245          87              A           black    X
249          87              B           black    X
294          87              A           silver   X

我试图在类别和颜色之间创建一个唯一的键,然后进行分组,但它变得困惑,我仍然必须手动进行操作。一定有更简单的方法。

df['key']=df['category']&df['color']

df['transaction_analysis']= df.groupby('transaction_id').key.transform(lambda x : '&'.join(set(x)))

最佳答案

不确定是否更简单,但肯定更干净。您可以对 transaction_idcategory 进行groupby,使用 unique 查找唯一颜色,然后取消堆叠。

此后,生成标志值的映射并稍后分配给 df

v = (
    df.groupby(['transaction_id', 'category'])
      .color
      .unique()
      .unstack(fill_value=set())
)
m = {
  k : 'X' if set(x).intersection(y) else '' for k, x, y in zip(v.index, v.A, v.B)
}    
df['flag'] = df['transaction_id'].map(m)

df

   product_id  transaction_id category   color flag
0         234              54        A   black     
1         349              54        B  silver     
2         213              46        A  silver     
3         490              46        A   black     
4         245              87        A   black    X
5         249              87        B   black    X
6         294              87        A  silver    X

关于Python Pandas 条件标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989537/

相关文章:

python - 如何使用列名称旋转 pandas.dataframe

java - 井字游戏控制台程序 - Java

java - if 语句中可以有两个条件吗

python - Django:操纵 for 循环以不同方式呈现信息

python - 如何通过参数传递大于或小于号?

python - Pandas - 拆分数据框中列的每个元素并添加到列表

python - Pandas :沿着多索引的第一层切片

Python-根据列表中的位置/索引从字典中获取值

python :数字序列

c++ - if-else 样式和优化