[英]How to iterate over pandas dataframe and create new column
我有一個具有2列的pandas數據框。 我想遍歷它的行,並基於第2列中的字符串,我想在新創建的第3列中添加一個字符串。 我試過了:
for i in df.index:
if df.ix[i]['Column2']==variable1:
df['Column3'] = variable2
elif df.ix[i]['Column2']==variable3:
df['Column3'] = variable4
print(df)
但是結果數據幀在第3列中只有Variable2。
任何想法我還能怎么做?
我認為您可以使用double numpy.where
,這是更快的循環:
df['Column3'] = np.where(df['Column2']==variable1, variable2,
np.where(df['Column2']==variable3, variable4))
如果兩個條件均為False
,則需要添加變量:
df['Column3'] = np.where(df['Column2']==variable1, variable2,
np.where(df['Column2']==variable3, variable4, variable5))
樣品:
df = pd.DataFrame({'Column2':[1,2,4,3]})
print (df)
Column2
0 1
1 2
2 4
3 3
variable1 = 1
variable2 = 2
variable3 = 3
variable4 = 4
variable5 = 5
df['Column3'] = np.where(df['Column2']==variable1, variable2,
np.where(df['Column2']==variable3, variable4, variable5))
print (df)
Column2 Column3
0 1 2
1 2 5
2 4 5
3 3 4
另一個解決方案,感Jon Clements
( Jon Clements
:
df['Column4'] = df.Column2.map({variable1: variable2, variable3:variable4}).fillna(variable5)
print (df)
Column2 Column3 Column4
0 1 2 2.0
1 2 5 5.0
2 4 5 5.0
3 3 4 4.0
您也可以嘗試這樣做(如果要保留for
循環,請使用):
new_column = []
for i in df.index:
if df.ix[i]['Column2']==variable1:
new_column.append(variable2)
elif df.ix[i]['Column2']==variable3:
new_column.append(variable4)
else : #if both conditions not verified
new_column.append(other_variable)
df['Column3'] = new_column
首先,不需要遍歷每個索引,只需使用內置在布爾索引中的 pandas即可。 在這里的第一行,我們收集Column2
中與variable1
相同的所有值,並將Column3
的同一行設置為variable2
df.ix[df.Column2==variable1, 'Column3'] = variable2
df.ix[df.Column2==variable3, 'Column3'] = variable4
一個簡單的例子是
import pandas as pd
df = pd.DataFrame({'Animal':['dog', 'fish', 'fish', 'dog']})
print(df)
Animal
0 dog
1 fish
2 fish
3 dog
df.ix[df.Animal=='dog', 'Colour'] = 'brown'
df.ix[df.Animal=='fish', 'Colour'] = 'silver'
print(df)
Animal Colour
0 dog brown
1 fish silver
2 fish silver
3 dog brown
可以使用&
和|
等多個條件輕松構建上述方法 布爾索引。
df = pd.DataFrame({'Animal':['dog', 'fish', 'fish', 'dog'], 'Age': [1, 3, 2, 10]})
print(df)
Age Animal
0 1 dog
1 3 fish
2 2 fish
3 10 dog
df.ix[(df.Animal=='dog') & (df.Age > 8), 'Colour'] = 'grey' # old dogs go grey
df.ix[(df.Animal=='dog') & (df.Age <= 8), 'Colour'] = 'brown'
df.ix[df.Animal=='fish', 'Colour'] = 'silver'
print(df)
Age Animal Colour
0 1 dog brown
1 3 fish silver
2 2 fish silver
3 10 dog grey
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.