我有这个数据框
car color years max_years
0 audi black 1 7
1 audi blue 2 7
2 audi purple 4 7
3 audi black 6 7
4 bmw blue 1 5
5 bmw green 2 5
6 bmw grey 5 5
7 bmw blue 20 5
8 fiat green 1 4
9 fiat green 3 4
10 fiat green 4 4
11 fiat green 10 4
如果一个颜色条目是1年,我想计算该颜色在该汽车品牌组中出现的次数,直到该组的最大年份。你知道吗
我想为每个汽车品牌组运行isin
颜色条件,我认为我的问题是颜色列表不是grouby('car')
,因此评估适用于所有汽车
结果应该是:
0 audi 2
1 bmw 1
2 fiat 3
任何帮助都将不胜感激
import pandas as pd
car = ['audi', 'audi', 'audi', 'audi', 'bmw', 'bmw', 'bmw', 'bmw', 'fiat', 'fiat', 'fiat', 'fiat']
color = ['black', 'blue', 'purple', 'black', 'blue', 'green', 'grey', 'blue', 'green', 'green', 'green', 'green']
years = [1, 2, 4, 6, 1, 2, 5, 20, 1, 3, 4, 10, ]
max_years = [7, 7, 7, 7, 5, 5, 5, 5, 4, 4, 4, 4]
data = {'car': car, 'color': color, 'years': years, 'max_years': max_years}
df = pd.DataFrame(data=data)
colors = df.loc[df.years == 1]['color'].values
colour_cars = df[(df.years <= df.max_years) & df['color'].isin(colors)].groupby(['car']).size().reset_index(name='colour_cars')
print(colour_cars)
想法是使用^{} 由
Series
创建,使用years == 1
过滤数据帧,并按color
列进行比较:或者您可以使用由^{} 转换为整数的
mask
,然后需要按sum
计算True
的值,并将Series
df['car']
传递给groupby
:不同的想法是通过^{} 和
first
测试每组的第一种颜色(如果每组的第一年总是1
,则解决方案有效):相关问题 更多 >
编程相关推荐