我有以下数据:
year code value
2003 A 12
2003 B 11
2003 C 12
2004 A 14
2004 B 15
2004 C 13
2004 E 16
2005 A 9
2005 B 18
2005 C 16
2005 F 8
2005 G 19
我只想保留每年都存在的代码。
从上面的数据框中,我需要提取所有具有代码的行(2003,2004,2005)。这意味着我应该为代码A,B和C创建一个包含9行的新df。我尝试使用groupby和isin()但无法得到我需要的内容。
答案 0 :(得分:2)
没有val words = Array("one", "two", "two", "three", "three", "three")
val wordPairsRDD = sc.parallelize(words).map(word => (word, 1))
val wordCountsWithReduce = wordPairsRDD
.reduceByKey(_ + _)
.collect()
val wordCountsWithGroup = wordPairsRDD
.groupByKey()
.map(t => (t._1, t._2.sum))
.collect()
groupby
答案 1 :(得分:1)
我认为您需要按isin
进行过滤,但如果想要动态获取所有年份的所有值,请使用reduce
:
s = df.groupby('year')['code'].apply(list)
from functools import reduce
a = reduce(lambda x, y: set(x) & set(y), s)
print (list(a))
['C', 'A', 'B']
df = df[df['code'].isin(list(a))]
print (df)
year code value
0 2003 A 12
1 2003 B 11
2 2003 C 12
3 2004 A 14
4 2004 B 15
5 2004 C 13
7 2005 A 9
8 2005 B 18
9 2005 C 16
答案 2 :(得分:1)
您还可以尝试基于query
的方法。
$.each($('a'), function() {
$.each(this.attributes, function() {
if ( this.name.indexOf('data-ajax') === 0 ) {
// Do somethng with this.value
}
});
});
答案 3 :(得分:1)
您可以使用
选项1
In [647]: codes = pd.crosstab(df.year, df.code).replace({0: np.nan}).dropna(axis=1).columns
In [648]: df.query('code in @codes')
Out[648]:
year code value
0 2003 A 12
1 2003 B 11
2 2003 C 12
3 2004 A 14
4 2004 B 15
5 2004 C 13
7 2005 A 9
8 2005 B 18
9 2005 C 16
选项2
In [657]: codes = df.groupby(['year', 'code']).size().unstack().dropna(axis=1).columns
In [658]: df[df.code.isin(codes)]
Out[658]:
year code value
0 2003 A 12
1 2003 B 11
2 2003 C 12
3 2004 A 14
4 2004 B 15
5 2004 C 13
7 2005 A 9
8 2005 B 18
9 2005 C 16