簡體   English   中英

如何在 dataframe 中使用“for-loop”和列添加來生成列?

[英]How use 'for-loop' and column addition to produce column in dataframe?

我對 python 很陌生,所以非常感謝一些幫助。

在處理大型數據框時,我已經簡化了我的數據框。 我的問題是在 df1 中生成一個新列的代碼是什么,以便它在 df2 中看起來像“合並” - 即它由以下部分組成:

  1. “字母”列值
  2. 一個“for循環”,如果存在則包含下划線和“數字”值,如果沒有值則跳過此步驟(例如最后一行)
  3. 下划線和“大寫”列值
data1 = {'Letter': ['a', 'b', 'c'],
         'Number': ['1', '2', ''],
         'Capital': ['A', 'B', 'C']}

df1 = pd.DataFrame (data1, columns = ['Letter', 'Number', 'Capital'])
print(df1)



data2 = {'Letter': ['a', 'b', 'c'],
         'Number': ['1', '2', ''],
         'Capital': ['A', 'B', 'C'],
         'Merged': ['a_1_A', 'b_2_B', 'c_C']}

df2 = pd.DataFrame (data2, columns = ['Letter', 'Number', 'Capital', 'Merged'])
print(df2)

抱歉,我不知道如何運行此代碼,但希望這是有道理的。 我了解如何添加列(如下),但不知道如何合並 for 循環。 我最好的猜測是:

df1["merged"] = (df1["Letter"] + 
                     for value in data1:
                         if data1["Number"] != "":
                            "_" + data1["Number"]
                         else:
                + "_" + df1["Capital"])

您可以在單獨的 function 中定義您的邏輯,並將此 function 應用於每一行。 為了消除空字段,包括 filter() 方法。


def func(row):
    row['merged'] = '_'.join(filter(None, row))
    return row

df1 = df1.apply(func, axis=1)
df1

結果:

  Letter Number Capital merged
0      a      1       A  a_1_A
1      b      2       B  b_2_B
2      c              C    c_C

或者,您可以只使用 lambda function:

df1['merged'] = df1.apply(lambda row: '_'.join(filter(None, row)), axis=1)
df1

結果:

  Letter Number Capital merged
0      a      1       A  a_1_A
1      b      2       B  b_2_B
2      c              C    c_C

(幾乎總是,在 Pandas 中實現相同結果的方法不止一種 - 這可能既令人困惑又令人驚奇!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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