【问题标题】:Python TypeError: '>' not supported between instances of 'SeriesGroupBy' and 'SeriesGroupBy'Python TypeError:“SeriesGroupBy”和“SeriesGroupBy”的实例之间不支持“>”
【发布时间】:2021-11-04 08:47:41
【问题描述】:

我有两个数据名 df1 和 df2。

比较当天和id

  • 如果 rank df1
  • 如果排名 df1 > 排名 df2,则保留值 df1 类型“A”和 df2 类型“D”。

df1:

id day rank type
1 25/01 22 D
1 25/01 22 A
5 25/01 66 D
5 25/01 66 A
10 26/01 55 D

df2:

id day rank type
1 25/01 58 D
1 25/01 58 A
5 25/01 10 D
5 25/01 10 A
10 26/01 100 D
10 26/01 100 A

输出df1:

id day rank type
1 25/01 22 D
5 25/01 66 A
10 26/01 55 D

输出df2:

id day rank type
1 25/01 58 A
5 25/01 10 D
10 26/01 100 A

我有代码:

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'

那么我该如何解决这个问题?

谢谢!

【问题讨论】:

  • 两个数据框(df1,df2)的大小是否总是相同的?
  • 不,有区别

标签: python pandas dataframe pandas-groupby


【解决方案1】:
df1.groupby(["id", "Date"])['Rank']

属于实例“SeriesGroupBy”。

Pandas-groupby 文档中,您想将 str 放在后面以获取值。 然后你可以把它转换成一个int进行比较。

int(df1.groupby(["id", "Date"])['Rank'].str)

【讨论】:

  • 但是 Serie groupby 不能使用 str 因为它没有属性 'str'
【解决方案2】:
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

【讨论】:

  • 成功了,非常感谢
  • 听起来不错。 > 在 Series 或 SeriesGroupBy 之间不起作用,所以我在循环中解决了这个问题 :)
猜你喜欢
  • 1970-01-01
  • 2017-09-14
  • 2017-09-28
  • 2020-02-12
  • 2018-12-17
  • 1970-01-01
  • 2022-07-03
  • 1970-01-01
  • 2020-11-15
相关资源
最近更新 更多