[英]a more pythonic way to split a column in multiple columns and sum two of them
示例代碼:
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'bbox': [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0]]})
目標:
df = pd.DataFrame({'id': [1, 2, 3], 'bbox': [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0]], 'x1': [1, 5, 9], 'y1': [2, 6, 10], 'x2': [4, 12, 20], 'y2': [6, 14, 22]})
換句話說,我想在 dataframe 中添加四個integer列,其中前兩個只是bbox
中每個列表的前兩個元素,后兩個分別是每個列表的第一個和第三個元素的總和,以及第二個和第四個的總和。 目前,我這樣做:
df[['x1', 'y1', 'w', 'h']] = pd.DataFrame(df['bbox'].values.tolist(), index=df.index).astype(int)
df.assign(x2 = df['x1']+df['w'], y2 = df['y1']+df['h'])
df.drop(['w', 'h'], axis = 1)
這對我來說似乎有點令人費解。 有沒有辦法避免創建中間列w
和h
,或者它會降低代碼的可讀性? 可讀性對我來說比保存一個代碼行更重要,因此如果沒有可讀的替代方案,我將滿足於這個解決方案。
我認為您可以在第一步中創建x2
和y2
:
df1 = pd.DataFrame(df['bbox'].values.tolist(),index=df.index).astype(int)
df[['x1', 'y1', 'x2', 'y2']] = df1
df = df.assign(x2 = df['x1']+df['x2'], y2 = df['y1']+df['y2'])
print (df)
id bbox x1 y1 x2 y2
0 1 [1.0, 2.0, 3.0, 4.0] 1 2 4 6
1 2 [5.0, 6.0, 7.0, 8.0] 5 6 12 14
2 3 [9.0, 10.0, 11.0, 12.0] 9 10 20 22
或使用+=
:
df1 = pd.DataFrame(df['bbox'].values.tolist(),index=df.index).astype(int)
df[['x1', 'y1', 'x2', 'y2']] = df1
df['x2'] += df['x1']
df['y2'] += df['y1']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.