gpt4 book ai didi

python - 如何找到之前列定义的每个子集中存在的 pandas 单元格值?

转载 作者:行者123 更新时间:2023-11-28 21:00:29 26 4
gpt4 key购买 nike

我有一个 Pandas 数据框 df 看起来像这样(输入):

Item  Color
Car 1
Car 2
Bike 3
Bike 1
Train 4
Train 1

我想为每个 Item 值(输出)找到通常至少出现一次的每个 Color 值:

Item Color
Car 1
Bike 1
Train 1

我目前的方法是基于一个循环并且公认的丑陋。我确信有一种更 pythonic/高效的方法,最好是单行。

all_colors = df.Color.unique().tolist()
for single_color in all_colors:
df_slice = df[df.Color = single_color]
if len(df_slice) = len(df.Item.unique().tolist()):
print "Shared Color", single_color
print df_slice
else:
continue

如何找到存在于之前列定义的每个子集中的 pandas 单元格值?

编辑:问题标题也很庞大 - 如果有人有更好的措辞,请随意

最佳答案

选项 1
使用 groupby + value_counts + unstack,然后进行非空检查。

v = df.groupby('Item').Color.value_counts().unstack().notnull().all(0)
df[df.Color.isin(v.index[v])]

Item Color
0 Car 1
3 Bike 1
5 Train 1

详情
groupby 后跟 unstack 的结果如下所示:

df.groupby('Item').Color.value_counts().unstack()

Color 1 2 3 4
Item
Bike 1.0 NaN 1.0 NaN
Car 1.0 1.0 NaN NaN
Train 1.0 NaN NaN 1.0

现在,只需在行中使用 notnull + all 即可找到没有任何 NaN 的列。然后,使用它索引到 df


选项 2
get_dummies + sum -

v = pd.get_dummies(df.set_index('Item').Color).sum(0).eq(df.Item.nunique())
df[df.Color.isin(v.index[v])]

Item Color
0 Car 1
3 Bike 1
5 Train 1

详细信息

在这里,我利用 get_dummies 并找出哪些颜色已被表示 #df.Item.nunique() 次。

pd.get_dummies(df.set_index('Item').Color).sum(0)

1 3
2 1
3 1
4 1
dtype: int64

df.Item.nunique()
3

选项 3
与前两个类似,但它使用 pd.crosstab,然后您只需检查所有行的计数是否大于或等于 1:

v = pd.crosstab(df.Item, df.Color).ge(1).all(0)
df[df.Color.isin(v.index[v])]

Item Color
0 Car 1
3 Bike 1
5 Train 1

关于python - 如何找到之前列定义的每个子集中存在的 pandas 单元格值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48394280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com