簡體   English   中英

一些ide如何過濾一個pandas dataframe

[英]Some ide on how to filter a pandas dataframe

我想過濾 pandas 數據幀。 顯然我可以用幾個循環來做到這一點,但對於大量數據來說效率不高,所以我想問一些關於如何做的想法。

我有組織的數據,例如,

c1=t c2=detector(1,2,or3)  c3
1     1
1     2
2     1
2     2
2     3
3     2
3     3
4     1
4     3
...

它可以看作是模擬的次數, c1=tc2是模擬的檢測器類型。 有時您不會隨機獲得其中一個檢測器的數據,因此我想將每個數據幀中的數據划分為相同的檢測器時間。

第一列是索引遞增列,第二列只能有3個值(1,2,3),我想把這個dataframe分成3個,

  • 一個包含所有行的行,其中對於具有 1 和 2 值的相同c1
  • 包含同一c1的所有行,其中您有 1 個和 3 個值
  • 一個包含所有行的行,對於同一個c1 ,您有 2 個和 3 個值
  • 最后一個包含所有三個值 1,2,3

沒有唯一的c1行。

我想知道如何使用 pythonic 方法來過濾這個 dataframe。

您可以聚合set ,因此c2中值的排序並不重要:

s = df.groupby('c1')['c2'].agg(set)
print (s)
c1
1       {1, 2}
2    {1, 2, 3}
3       {2, 3}
4       {1, 3}
Name: c2, dtype: object

然后通過匹配集過濾c1

df1 = df[df['c1'].isin(s.index[s.eq(set([1,2]))])]
df2 = df[df['c1'].isin(s.index[s.eq(set([1,3]))])]
df3 = df[df['c1'].isin(s.index[s.eq(set([2,3]))])]
df4 = df[df['c1'].isin(s.index[s.eq(set([1,2,3]))])]

另一個想法是創建 DataFrames 字典:

s = df.groupby('c1')['c2'].agg(set)
print (s)

c1
1       {1, 2}
2    {1, 2, 3}
3       {2, 3}
4       {1, 3}
Name: c2, dtype: object

vals = [(1,2),(1,3),(2,3),(1,2,3)]

dfs = {'_'.join(map(str, x)): df[df['c1'].isin(s.index[s.eq(set(x))])] for x in vals}
print (dfs)
{'1_2':    c1  c2
0   1   1
1   1   2, '1_3':    c1  c2
7   4   1
8   4   3, '2_3':    c1  c2
5   3   2
6   3   3, '1_2_3':    c1  c2
2   2   1
3   2   2
4   2   3}

print (dfs['1_2'])
print (dfs['1_3'])
print (dfs['2_3'])
print (dfs['1_2_3'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM