gpt4 book ai didi

Python列表: For each columnA value show all the ColumnB values

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:38 24 4
gpt4 key购买 nike

我有一个数据框,我正在尝试合并两列(一列有数字 ID,另一列有字符串)。那么,让我们举个例子:

enter image description here

我想要做的是创建一个列表,该列表将显示columnA的每个值的所有columnB值(仅粘贴excel版本而不是列表输出):

enter image description here

最初这是我的代码:

#Group the results by the columns given
scenario = df.groupby(['ColumnA', 'ColumnB', 'ColumnC', 'ColumnD']).agg({'Start_Date': 'min', 'End_Date': 'max', 'Number': 'sum', 'Number2': 'sum'})

scenario1 = list()
for row in scenario.itertuples():
scenario1.append(row[0][0]," ",row[0][1])

并且返回了这个错误:

unsupported operand type(s) for +: 'int' and 'str'

这是一种常见的情况。

所以,我也尝试了以下场景:

scenario1.append(row[0][0]," ",row[0][1]) 

错误:

append() takes exactly one argument (3 given)

我找到了一个解决方案(未经过 100% 测试):

scenario1.append(str(row[0][0])+" "+row[0][1])

当我试图寻找解决方案时,我将数据帧转换为json:

json_data =json.loads(df.to_json(orient="records"))

scenario2 = [{"columna": x["ColumnA"], "columnb": x["ColumnB"]} for x in json_data if "columnC" in x and x["ColumnC"] == "one"]
print(scenario2)

返回一个空列表。请注意,我在此处为第三列添加了过滤器。我不明白为什么这不起作用。

UPD:

在 jezrael 回答之后,我尝试编辑它:

df = pd.DataFrame({'columnA':[1111,1111,2222,3333,4444,4444,5555,6666],
'columnB':['AAAA','BBBB','AAAA','BBBB','AAAA','CCCC','BBBB','CCCC'],
'columnC':['one','one','one','one','one','one','two','one'],
'NUM1':[1,3,5,7,1,0,4,5],
'NUM2':[5,3,6,9,2,4,1,1],
'W':list('aaabbbbb')})

print (df)

d = {'columnB':lambda x: x.tolist(), 'columnC':'first'}
df1 = df.groupby('columnA').agg(d)

print (df1)

我要返回这个:

enter image description here

最佳答案

我认为您需要通过 join 所有字符串列(如 ColumnB)进行聚合,或者如果只需要第一个值(如 ColumnC<),则需要通过 first 进行聚合.

如果需要聚合list,请使用lambda函数,例如ColumnD:

d = {'Start_Date': 'min', 
'End_Date': 'max',
'Number': 'sum',
'Number2': 'sum',
'ColumnB':', '.join,
'ColumnC':'first',
'ColumnD':lambda x: x.tolist()}
scenario = df.groupby(['ColumnA']).agg(d)

示例:

df = pd.DataFrame({'A':list('abcdef'),
'B':list('abcdef'),
'C':list('abcdef'),
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')})

print (df)
A B C D E F
0 a a a 1 5 a
1 b b b 3 3 a
2 c c c 5 6 a
3 d d d 7 9 b
4 e e e 1 2 b
5 f f f 0 4 b

d = {'A':lambda x: x.tolist(), 'B':'first', 'C':','.join, 'D':'min'}
df1 = df.groupby('F').agg(d)
print (df1)
A B C D
F
a [a, b, c] a a,b,c 1
b [d, e, f] d d,e,f 0

关于Python列表: For each columnA value show all the ColumnB values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597252/

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