1. 程式人生 > 實用技巧 >pandas 面試題挑戰四

pandas 面試題挑戰四

現有Series如下

np_array = np.random.randint(1, 10, 35)

要求轉化為7行5列的DataFrame如下圖:

解決辦法:

ser = pd.Series(np_array)
df = pd.DataFrame(ser.values.reshape(7,5))
print(df)

14 在Series中找到能夠被3整除的元素位置

現有Series如下:

ser = pd.Series(np.random.randint(1, 10, 7))
ser

輸出

0    1
1    5
2    7
3    2
4    4
5    1
6    3
dtype: int64

解決辦法如下:

np.argwhere(ser % 3==0)

輸出

array([[6]]) #索引6所在的元素能夠被3整除

15 從一個Series中按照指定位置摘除元素組成新的Series

ser = pd.Series(list('abcdefghijklmnopqrstuvwxyz'))

拿出[0, 4, 8, 14, 20]位置所在的元素組成新的Series
解決辦法:

pos = [0, 4, 8, 14, 20]
ser.take(pos)

輸入:

0     a
4     e
8     i
14    o
20    u
dtype: object

16 如何水平堆疊/垂直堆疊兩個Series

現有兩個Series如下:

ser1 = pd.Series(range(5))
ser2 = pd.Series(list('abcde'))

Vertical垂直 (變高)

ser1.append(ser2)

輸出:

0    0
1    1
2    2
3    3
4    4
0    a
1    b
2    c
3    d
4    e
dtype: object

Horizontal水平 (變寬)

df = pd.concat([ser1, ser2], axis=1)
df

17 查詢Series2中的元素,在Series1的那個位置?

現有Series如下:

ser1 = pd.Series([10, 9, 6, 5, 3, 1, 12, 8, 13])
ser2 = pd.Series([1, 3, 10, 13])

查詢ser2中的元素在ser1的那個位置
解決辦法:

[np.where(i == ser1)[0].tolist()[0] for i in ser2]

輸出:

[5, 4, 0, 8]

解析見下圖: