簡體   English   中英

將系列有效整合到熊貓數據框中

[英]Efficiently integrate a series into a pandas dataframe

我有一個索引為[0, 1, 2...]的pandas數據幀,並且列表如下: [1, 2, 2, 0, 1...]

我想在數據框中添加一個“計數”列,以反映索引中的數字在列表中被引用的次數。

鑒於上面的例子中列出的“計數”列將具有值2索引2 ,因為2次發生(到目前為止)。 有比遍歷列表更有效的方法嗎?

好了,這是一種方法,首先將列表加載到df中,然后使用value_counts添加'occurrence'列,然后將其merge到您的orig df中:

In [61]:
df = pd.DataFrame({'a':np.arange(10)})
l=[1,2,2,0,1]
df1 = pd.DataFrame(l, columns=['data'])
df1['occurence'] = df1['data'].map(df1['data'].value_counts())
df1

Out[61]:
   data  occurence
0     1          2
1     2          2
2     2          2
3     0          1
4     1          2

In [65]:
df.merge(s, left_index=True, right_on='data',how='left').fillna(0).drop_duplicates().reset_index(drop=True)

Out[65]:
   a  data  count
0  0     0      1
1  1     1      2
2  2     2      2
3  3     3      0
4  4     4      0
5  5     5      0
6  6     6      0
7  7     7      0
8  8     8      0
9  9     9      0

在熊貓中,統計數據框中數字出現的次數很容易

您只需使用Series.value_counts方法。

然后,使用pandas.merge函數將分組的數據與原始數據框合並

像您一樣設置一個DataFrame:

df = pd.DataFrame({'nomnom':np.random.choice(['cookies', 'biscuits', 'cake', 'lie'], 10)})

df現在是一個其中包含一些任意數據的DataFrame(因為您說過那里有更多數據)。

     nomnom
0  biscuits
1       lie
2  biscuits
3      cake
4       lie
5   cookies
6      cake
7      cake
8      cake
9      cake

設置類似您的清單:

yourlist = np.random.choice(10, 10)

您的清單現在是:

array([2, 9, 2, 3, 4, 8, 5, 8, 6, 8])

您需要的實際代碼(TLDR;):

counts = pd.DataFrame(pd.value_counts(yourlist))
pd.merge(left=df, left_index=True,
         right=counts, right_index=True,
         how='left').fillna(0)

暫無
暫無

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

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