gpt4 book ai didi

python - 用两列的 groupby 的第一行构建新列 - Pandas

转载 作者:太空狗 更新时间:2023-10-29 21:20:31 26 4
gpt4 key购买 nike

我正在尝试构建一个新列,如果它是列“type”的元素第一次具有列“xx”的特定值,则该列的值为 1,并在中给出 0 的值任何其他情况。

  • 我正在使用的原始数据框 (df) 是:

    idx = [np.array(['Jan-18', 'Jan-18', 'Feb-18', 'Mar-18', 'Mar-18', 'Mar-18','Apr-18', 'Apr-18', 'May-18', 'Jun-18', 'Jun-18', 'Jun-18','Jul-18', 'Aug-18', 'Aug-18', 'Sep-18', 'Sep-18', 'Oct-18','Oct-18', 'Oct-18', 'Nov-18', 'Dec-18', 'Dec-18',]),np.array(['A', 'B', 'B', 'A', 'B', 'C', 'A', 'B', 'B', 'A', 'B', 'C','A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C'])]
    data = [{'xx': 1000}, {'xx': 1000}, {'xx': 1200}, {'xx': 800}, {'xx': 800}, {'xx': 800},{'xx': 1000}, {'xx': 1000}, {'xx': 800}, {'xx': 1200}, {'xx': 1200}, {'xx': 1200},{'xx': 1000}, {'xx': 1000}, {'xx': 1000}, {'xx': 1600}, {'xx': 1600}, {'xx': 1000}, {'xx': 800}, {'xx': 800}, {'xx': 1000}, {'xx': 1600}, {'xx': 1600}]
    df = pd.DataFrame(data, index=idx, columns=['xx'])
    df.index.names=['date','type']
    df=df.reset_index()
    df['date'] = pd.to_datetime(df['date'],format = '%b-%y')
    df=df.set_index(['date','type'])
    df['xx'] = df.xx.astype('float')
  • 我要找的结果是:

                         xx   yy
    date type
    2018-01-01 A 1000.0 1.0
    B 1000.0 1.0
    2018-02-01 B 1200.0 1.0
    2018-03-01 A 800.0 1.0
    B 800.0 1.0
    C 800.0 1.0
    2018-04-01 A 1000.0 0.0
    B 1000.0 0.0
    2018-05-01 B 800.0 0.0
    2018-06-01 A 1200.0 1.0
    B 1200.0 0.0
    C 1200.0 1.0
    2018-07-01 A 1000.0 0.0
    2018-08-01 B 1000.0 0.0
    C 1000.0 1.0
    2018-09-01 A 1600.0 1.0
    B 1600.0 1.0
    2018-10-01 C 1000.0 0.0
    A 800.0 0.0
    B 800.0 0.0
    2018-11-01 A 1000.0 0.0
    2018-12-01 B 1600.0 0.0
    C 1600.0 1.0
  • 我尝试了以下代码,但它不起作用(它给出了一条错误消息):

    df['yy'] = df.assign(zz=(df.groupby(['type','xx']).first())).zz.transform(lambda x: 1)

错误信息是

ValueError: Wrong number of items passed 0, placement implies 1.

我尝试了其他方法,例如 nth(0),但它也不起作用。非常欢迎任何有关如何解决此问题的建议。

最佳答案

尝试:

df['yy'] = (df.groupby(level=1).xx
.apply(lambda x: (~x.duplicated()).astype(int))
)

df['yy']

输出:

date        type
2018-01-01 A 1
B 1
2018-02-01 B 1
2018-03-01 A 1
B 1
C 1
2018-04-01 A 0
B 0
2018-05-01 B 0
2018-06-01 A 1
B 0
C 1
2018-07-01 A 0
2018-08-01 B 0
C 1
2018-09-01 A 1
B 1
2018-10-01 C 0
A 0
B 0
2018-11-01 A 0
2018-12-01 B 0
C 1
Name: yy, dtype: int32

关于python - 用两列的 groupby 的第一行构建新列 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com