![](/img/trans.png)
[英]Add the same row multiple times from a pandas dataframe to a new one, each time altering a value in a specific column
[英]Altering one row at a time in a Pandas dataframe
我正在嘗試編寫一個for循環,該循環將遍歷數據幀中索引的子集,每個循環返回僅更改一行的數據幀。
這是一些偽代碼來說明我的意思:
# Two columns of random numbers
df = pd.DataFrame(np.random.randn(10,2),columns=list('ab'))
# The index values where row 'a' > 0
indices = df.loc[df['a'] > 0].index
這就是我要這樣做的方式:
for index in indices:
dummy = df
dummy.loc[index,'a'] = 'Hello'
dummy.loc[index,'b'] = 'World'
print(dummy)
哪個返回:
a b
0 -1.30278 0.592978
1 Hello World
2 0.0113196 0.441662
3 1.59222 -0.152032
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
a b
0 -1.30278 0.592978
1 Hello World
2 Hello World
3 1.59222 -0.152032
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
a b
0 -1.30278 0.592978
1 Hello World
2 Hello World
3 Hello World
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
等等...
我正在嘗試在dummy = df
行上的每次迭代中重置a
和b
值,但是它沒有按我期望的方式工作。
但是我想要產生的是:
a b
0 -1.30278 0.592978
1 Hello World
2 0.0113196 0.441662
3 1.59222 -0.152032
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
a b
0 -1.30278 0.592978
1 0.74578 0.482945
2 Hello World
3 1.59222 -0.152032
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
a b
0 -1.30278 0.592978
1 0.74578 0.482945
2 0.01131 0.441662
3 Hello World
4 -0.293761 -0.519106
5 -0.402177 1.27412
6 1.24692 -0.203043
7 0.232682 -1.29515
8 -1.03781 0.89598
9 0.000474012 0.572173
等等...
任何幫助將不勝感激!
您應該在循環中添加.copy()
for key,index in enumerate(indices):
dummy = df.copy()
dummy.loc[index,'a'] = 'Hello'
dummy.loc[index,'b'] = 'World'
print(dummy)
您可能期望dummy = df
復制df
。 dummy
對象實際上指向與df
相同的基礎對象,因此對dummy
對象所做的任何更改也會對df
進行。 您可以通過復制df
來解決此問題,但一種更簡便,更有效的方法是在打印之前保存原始值,然后在打印后還原它們。
for index in indices:
orig_values = df.loc[index, ['a', 'b']]
df.loc[index, ['a', 'b']] = ['Hello', 'World']
print(df)
df.loc[index, ['a', 'b']] = orig_values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.