[英]How to add new column data by individual rows in Pandas DataFrame
我有一個 dataframe df
。 我想添加 2 個新列0
和1
,並一次將數據添加到這些列中,而不是一次添加完整的列。 通過對df
中的所有行使用pd.Series
,我在新列數據中獲得了NaN
值,而不是最后一行。 給我一個解決這個問題的方法。
我需要一次添加一行數據。 請提供相應的解決方案。
df
val
1
2
3
代碼
for j in range(len(df)):
for i in range(2):
cal = df.val.iloc[j] + 10
df[i] = pd.Series(cal, index=df.index[[j]])
output
val | 0 | 1
1 | NaN | NaN
2 | NaN | NaN
3 | 13.0 | 13.0
預計 output
val | 0 | 1
1 | 11.0 | 11.0
2 | 12.0 | 12.0
3 | 13.0 | 13.0
編輯我實際上在stackoverflow上問了一個我無法得到答案的問題。 這就是為什么我試圖濃縮這個問題並以這種方式提出。 如果可能的話,你們都可以在這里查看原始問題
使用apply
function
In [29]: df
Out[29]:
val
0 1
1 2
2 3
In [13]: df[0] = df["val"].apply(lambda x: x + 10)
In [14]: df[1] = df["val"].apply(lambda x: x + 10)
In [15]: df
Out[15]:
val 0 1
0 1 11 11
1 2 12 12
2 3 13 13
或使用iterrows
In [21]: temp = []
In [22]: for inex,row in df.iterrows():
...: temp.append(row["val"] + 10)
...:
In [23]: temp
Out[23]: [11, 12, 13]
In [24]: df[0] = temp
In [25]: df[1] = temp
In [26]: df
Out[26]:
val 0 1
0 1 11 11
1 2 12 12
2 3 13 13
目前尚不清楚為什么您嘗試使用低效的方法一次添加一行,因此我建議不要使用此代碼,而是依賴矢量化解決方案。
但是,如果你真的出於某種原因想要這樣做,你應該像這樣修改你的循環
for j in range(len(df)):
for i in range(2):
cal = df.val.iloc[j] + 10
df.loc[j, i] = cal
# val 0 1
# 0 1 11.0 11.0
# 1 2 12.0 12.0
# 2 3 13.0 13.0
免責聲明 - 您不應使用此代碼。 這是錯誤的方式。 但是 - 考慮到你想逐行做,這里有一個解決方案:
df = pd.DataFrame({"val": [1,2, 3]})
for i in df.index:
val = df.loc[i, "val"]
for j in [0,1]:
df.loc[i, j] = val + 10
print(df)
==>
val 0 1
0 1 11.0 11.0
1 2 12.0 12.0
2 3 13.0 13.0
正確的方法是執行以下操作:
df = pd.DataFrame({"val": [1,2, 3]})
df[0] = df.val + 10
df[1] = df.val + 10
基本上相同的結果,在 pandas 方面要好得多。
也許:
for i in range(len(df)):
df["val"].iloc[i] = df.val.iloc[i] + 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.