如何決議所有行上的資料,并使用該行用多行資料填充其他資料框?
我正在嘗試決議一個包含多個資料條目的 csv 檔案以用于培訓目的,因為我對這項技術很陌生。
我的資料包含 10 列和數百行。第一列填充了 10、50 或 90 的代碼。示例:
資料框 1:
| 代碼 | 功率/字符 |
|---|---|
| 10 | 電源-220 |
| 90 | 結尾 |
| 10 | 電源-290 |
| 90 | 結尾 |
| 10 | 電源-445 |
| 90 | 結尾 |
| 10 | 電源-390 |
| 50 | 克洛索 |
| 50 | 克羅努斯 |
| 90 | 結尾 |
| 10 | 電源-550 |
| 50 | 戰神 |
| 50 | 雅典娜 |
| 50 | 阿爾忒彌斯 |
| 50 | 得墨忒耳 |
| 90 | 結尾 |
而這樣的例子不勝列舉..
一方面,我希望能夠讀取第一個單元格,如果這是代碼 10,則直接填充另一個資料幀。
另一方面,我想用所有代碼 50s 填充另一個資料框,但我希望能夠從以前的代碼 10 中獲取資料,因為它包含所使用的 Power 型別,并填充一個新的此資料框上的列。
新的資料框應該如下所示:
資料框 2:
| 代碼 | 力量 |
|---|---|
| 10 | 電源-220 |
| 10 | 電源-290 |
| 10 | 電源-445 |
| 10 | 電源-390 |
| 10 | 電源-550 |
資料框 3:
| 代碼 | 特點 | 力量 |
|---|---|---|
| 50 | 克洛索 | 電源-390 |
| 50 | 克羅努斯 | 電源-390 |
| 50 | 戰神 | 電源-550 |
| 50 | 雅典娜 | 電源-550 |
| 50 | 阿爾忒彌斯 | 電源-550 |
| 50 | 得墨忒耳 | 電源-550 |
到目前為止,我一直在使用 iterrows,而且我到處都讀到這是一個壞主意.. 但我正在努力實作另一種方法..
在我的代碼中,我只創建了另外兩個資料框,但我還不知道從前一個單元格中檢索資料的方法。我通常會使用經典的方法,但我認為它相當古老。
for index, row in df.iterrows():
if (df.iat[index,0] == '10'):
df2 = df2.append(df.loc[index], ignore_index = True)
if (df.iat[index,0] == '50'):
df3 = df3.append(df.loc[index], ignore_index = True)
有任何想法嗎 ?
uj5u.com熱心網友回復:
對于 df2,它非常簡單:
df2 = df.rename(columns={'Power/Character': 'Power'}) \
.loc[df['Code'] == 10, :]
對于 df3,它有點復雜:
# Extract power and fill forward values
power = df.loc[df['Code'] == 10, 'Power/Character'].reindex(df.index).ffill()
df3 = df.rename(columns={'Power/Character': 'Character'}) \
.assign(Power=power).loc[lambda x: x['Code'] == 50]
輸出:
>>> df2
Code Power
0 10 Power-220
2 10 Power-290
4 10 Power-445
6 10 Power-390
10 10 Power-550
>>> df3
Code Character Power
7 50 Clotho Power-390
8 50 Kronus Power-390
11 50 Ares Power-550
12 50 Athena Power-550
13 50 Artemis Power-550
14 50 Demeter Power-550
uj5u.com熱心網友回復:
您可以簡單地將所需的行復制到另一個資料框,
df2 = df[df.col_1 == '10'].copy()
這將創建一個新的資料框,其中僅包含符合某些條件df2的列中的行。col_1該copy()函式保證兩個資料幀不相同,并且其中一個的更改不會影響另一個。
如果df2已經存在,您可以將它們連接起來
df2 = pd.concat([df2, df[df.col_1 == '10'].copy()])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412460.html
標籤:
