[英]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.