![](/img/trans.png)
[英]How to write a for-loop/if-statement for a dataframe (integer) column
[英]How use 'for-loop' and column addition to produce column in dataframe?
我對 python 很陌生,所以非常感謝一些幫助。
在處理大型數據框時,我已經簡化了我的數據框。 我的問題是在 df1 中生成一個新列的代碼是什么,以便它在 df2 中看起來像“合並” - 即它由以下部分組成:
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.