簡體   English   中英

如何按 Pandas DataFrame 中的各個行添加新列數據

[英]How to add new column data by individual rows in Pandas DataFrame

我有一個 dataframe df 我想添加 2 個新列01 ,並一次將數據添加到這些列中,而不是一次添加完整的列。 通過對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM