[英]pandas row specific apply
與此R問題類似,我想使用Pandas將函數應用於Series(或DataFrame中的每一行)中的每個項目,但是希望將該行的索引或id用作此函數的參數。 作為一個簡單的例子,假設有人想要創建[(index_i,value_i),...,(index_n,value_n)]形式的元組列表。 使用簡單的Python for循環,我可以這樣做:
In [1] L = []
In [2] s = Series(['six', 'seven', 'six', 'seven', 'six'],
index=['a', 'b', 'c', 'd', 'e'])
In [3] for i, item in enumerate(s):
L.append((i,item))
In [4] L
Out[4] [(0, 'six'), (1, 'seven'), (2, 'six'), (3, 'seven'), (4, 'six')]
但必須有一個更有效的方法來做到這一點? 或許更像Panda-likeh喜歡Series.apply? 實際上,我並不擔心(在這種情況下)返回任何有意義的東西,但更多的是為了“應用”之類的效率。 有任何想法嗎?
如果對函數使用apply方法,那么系列中的每個項都將使用這樣的函數進行映射。 例如
>>> s.apply(enumerate)
a <enumerate object at 0x13cf910>
b <enumerate object at 0x13cf870>
c <enumerate object at 0x13cf820>
d <enumerate object at 0x13cf7d0>
e <enumerate object at 0x13ecdc0>
你想要做的只是枚舉系列本身。
>>> list(enumerate(s))
[(0, 'six'), (1, 'seven'), (2, 'six'), (3, 'seven'), (4, 'six')]
如果您想要對所有實體的字符串求和,該怎么辦?
>>> ",".join(s)
'six,seven,six,seven,six'
申請的更復雜用法是:
>>> from functools import partial
>>> s.apply(partial(map, lambda x: x*2 ))
a ['ss', 'ii', 'xx']
b ['ss', 'ee', 'vv', 'ee', 'nn']
c ['ss', 'ii', 'xx']
d ['ss', 'ee', 'vv', 'ee', 'nn']
e ['ss', 'ii', 'xx']
[編輯]
根據OP的澄清問題:不要將系列(1D)與DataFrames(2D) http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe混淆 - 因為我沒有真正看到你可以談論行。 但是,您可以通過創建新系列在函數中包含索引(應用不會為您提供有關當前索引的任何信息):
>>> Series([s[x]+" my index is: "+x for x in s.keys()], index=s.keys())
a six index a
b seven index b
c six index c
d seven index d
e six index e
無論如何,我建議你切換到其他數據類型,以避免巨大的內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.