我有兩個資料名 df1 和 df2。
比較同一天和id
- 如果等級 df1 < 等級 df2,則保留值 df1 型別“D”和 df2 型別“A”。
- 如果等級 df1 > 等級 df2,則保留值 df1 型別“A”和 df2 型別“D”。
df1:
| ID | 日 | 秩 | 型別 |
|---|---|---|---|
| 1 | 25/01 | 22 | D |
| 1 | 25/01 | 22 | 一種 |
| 5 | 25/01 | 66 | D |
| 5 | 25/01 | 66 | 一種 |
df2:
| ID | 日 | 秩 | 型別 |
|---|---|---|---|
| 1 | 25/01 | 58 | D |
| 1 | 25/01 | 58 | 一種 |
| 5 | 25/01 | 10 | D |
| 5 | 25/01 | 10 | 一種 |
輸出df1:
| ID | 日 | 秩 | 型別 |
|---|---|---|---|
| 1 | 25/01 | 22 | D |
| 5 | 25/01 | 66 | 一種 |
輸出df2:
| ID | 日 | 秩 | 型別 |
|---|---|---|---|
| 1 | 25/01 | 58 | 一種 |
| 5 | 25/01 | 10 | D |
我有代碼:
if df1.groupby(["id", "Date"])['Rank'] > df2.groupby(["id", "Date"])['Rank']:
df1 = df1[(df1['Type' == 'A'])]
df2 = df2[(df2['Type' == 'D'])]
else:
df1 = df1[(df1['Type' == 'D'])]
df2 = df2[(df2['Type' == 'A'])]
但它給了我以下錯誤:
TypeError: '>' not supported between instances of 'SeriesGroupBy' and 'SeriesGroupBy'
那么我該如何解決這個問題?
謝謝!
uj5u.com熱心網友回復:
df1.groupby(["id", "Date"])['Rank']
例如“SeriesGroupBy”。
從Pandas-groupby檔案中,你想把 str 放在后面來獲取值。然后您可以將其轉換為 int 進行比較。
int(df1.groupby(["id", "Date"])['Rank'].str)
uj5u.com熱心網友回復:
df1 = pd.DataFrame(
{
'id': [1, 1, 5, 5],
'day': ['25/01', '25/01', '25/01', '25/01'],
'rank': [22, 22, 66, 66],
'type': ['D', 'A', 'D', 'A'],
}
)
df2 = pd.DataFrame(
{
'id': [1, 1, 5, 5],
'day': ['25/01', '25/01', '25/01', '25/01'],
'rank': [58, 58, 10, 10],
'type': ['D', 'A', 'D', 'A'],
}
)
df1 = df1.drop_duplicates(['id', 'day', 'rank'])
df2 = df2.drop_duplicates(['id', 'day', 'rank'])
for i in range(df1.shape[0]):
if df1.iloc[i]['rank'] > df2.iloc[i]['rank']:
df1.iloc[i, 3] = 'A'
df2.iloc[i, 3] = 'D'
else:
df1.iloc[i, 3] = 'D'
df2.iloc[i, 3] = 'A'
print(df1)
print(df2)
這將列印您想要的內容:
id day rank type
0 1 25/01 22 D
2 5 25/01 66 A
id day rank type
0 1 25/01 58 A
2 5 25/01 10 D
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/347560.html
