gpt4 book ai didi

python - Pandas 按结果分组到列

转载 作者:行者123 更新时间:2023-12-04 07:30:51 27 4
gpt4 key购买 nike

我有这样的数据框:

x = pd.DataFrame({
'audio': ['audio1', 'audio1', 'audio2', 'audio2', 'audio3', 'audio3'],
'text': ['text1', 'text2', 'text3', 'text4', 'text5', 'text6'],
'login': ['operator1', 'operator2', 'operator3', 'operator4', 'operator5', 'operator6']
})

我正在尝试像这样聚合它:
x1 = x.groupby('audio')['text'].agg(
[
('text1', lambda x : x.iat[0]),
('text2', lambda x : x.iat[1]),
('leven', lambda x: Levenshtein.distance(x.iat[0], x.iat[1])) #some function works with grouped text
]
).reset_index()

它可以工作,但我还需要将分组登录添加到行,以使行像这样:
audio, text1, text2, leven, login1, login2

我试过类似 lambda x : x.ait[0, 1]但它不起作用

最佳答案

查看您的数据框,我正在考虑旋转数据框,以下是我使用 的方法 groupby().cumcount() unstack 使用一些列格式来创建一个透视数据框。

选项 1:
那么你可以利用 df.apply 应用该功能

m = x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m = m.assign(leven=m.apply(lambda x:
Levenshtein.distance(x['text1'],x['text2']),1)).reset_index()
    audio  text1  text2     login1     login2  leven
0 audio1 text1 text2 operator1 operator2 1
1 audio2 text3 text4 operator3 operator4 1
2 audio3 text5 text6 operator5 operator6 1

选项 2: (我更喜欢这个)

您也可以使用列表理解来执行相同的操作,只需将最后一行替换为:
m = x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m = m.assign(leven=[Levenshtein.distance(a,b) for
a,b in zip(m['text1'],m['text2'])]).reset_index()
    audio  text1  text2     login1     login2  leven
0 audio1 text1 text2 operator1 operator2 1
1 audio2 text3 text4 operator3 operator4 1
2 audio3 text5 text6 operator5 operator6 1

选项 3:

如果 leven的位置列很重要,您可以使用 df.insert :
m=x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m.insert(2,'leven',[Levenshtein.distance(a,b) for a,b in zip(m['text1'],m['text2'])])
m=m.reset_index()
    audio  text1  text2  leven     login1     login2
0 audio1 text1 text2 1 operator1 operator2
1 audio2 text3 text4 1 operator3 operator4
2 audio3 text5 text6 1 operator5 operator6

关于python - Pandas 按结果分组到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373189/

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