![](/img/trans.png)
[英]How to get max values with groupby of entire dataframe in Pandas, not each row
[英]how to assign an entire list to each row of a pandas dataframe
我有一個 dataframe 和一個列表
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
我想在 dataframe 的每一行中有一個列表作為元素。如果我喜歡這里,
df['C'] = mylist
Pandas 試圖每行廣播一個值,所以我得到一個錯誤Length of values does not match length of index
。
A B C
0 1 4 [10,20,40,50]
1 2 5 [10,20,40,50]
2 3 6 [10,20,40,50]
首先,我認為在熊貓中使用list
s並不是一個好主意 。
但是有可能通過列表理解:
df['C'] = [mylist for i in df.index]
#another solution
#df['C'] = pd.Series([mylist] * len(df))
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
一種使用np.tile
替代方案:
df['C'] = np.tile(mylist, (len(df),1)).tolist()
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
只是用df.assign完成我之前的回答,借用@jezrael的列表理解
>>> df
A B
0 1 4
1 2 5
2 3 6
>>> df.assign(C = [mylist for i in df.index])
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
或者,永久添加到DataFrame
df = df.assign(C = [mylist for i in df.index])
使用 df.insert
執行此操作的另一種方法
因為我們指定列的順序,因此可以通過插入索引2使用insert(所以應該是數據幀中的第三個col)
>>> df.insert(2, 'C', '[10, 20, 30, 40, 50]') # directly assigning the list
>>> df
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
那應該工作:
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
my_list = [10, 20, 30, 40]
df['C'] = [my_list] * df.shape[0]
df
A B C
0 1 4 [10, 20, 30, 40]
1 2 5 [10, 20, 30, 40]
2 3 6 [10, 20, 30, 40]
我同意@jezrael 的觀點,使用 pandas 中的列表不是個好主意。 還有一種更快的矢量化方式:
df = pd.DataFrame(index=np.arange(1e6))
mylist= [10,20,30,40,50]
#ORIGINAL:
%%timeit -n 100
df['C'] = [mylist for i in df.index]
>>> 188 ms ± 922 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# VECTORIZED:
%%timeit -n 100
q = np.array([1,], dtype=object) # dummy array, note the dtype
q[0] = mylist # squeeze the list into single cell
df['C'] = np.tile(q, df.shape[0]) # tile and assign
>>> 12.1 ms ± 44.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
對於較大的 DF 尺寸,增益特別高。 (在本例中為 15x)希望有一種更優雅的方法可以將列表放入單個 numpy 單元格中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.