gpt4 book ai didi

python - 如何更改某些行以在数据框中列出?

转载 作者:行者123 更新时间:2023-12-01 07:45:57 26 4
gpt4 key购买 nike

我在 df 中有一些行,它是 7 天的数据,带有一些(可能是 3-5)个特征,我想根据特征将 7 天的数组合并到列表中。

现在是循环唯一列来应用列表函数,但效率不高。

如果直接加载df,df会自动为重复列添加数字后缀,但concat不会

df1 = pd.DataFrame({"userId":["u1", "u2", "u3", "u4"], "a":[1,2,3,4], "b":[2,3,4,5], "c":[3,4,5,6], "d":[4,5,6,7]}).set_index('userId')
df2 = pd.DataFrame({"userId":["u1", "u2", "u3", "u4"], "a":[4,0,1,1], "b":[2,4,4,5], "c":[3,6,5,6], "d":[4,5,6,9]}).set_index('userId')
df3 = pd.DataFrame({"userId":["u1", "u2", "u3", "u4"], "a":[1,2,5,4], "b":[2,1,4,5], "c":[3,2,5,6], "d":[4,3,4,7]}).set_index('userId')
df = pd.concat([df1,df2,df3], axis=1, sort=False)
df_new = pd.DataFrame()
columns = df.columns.unique().tolist()
for columns_name in columns:
df_new[columns_name] = df[columns_name].apply(lambda x: x.tolist(), axis=1)
print(df_new)
a b c d
userId
u1 [1, 4, 1] [2, 2, 2] [3, 3, 3] [4, 4, 4]
u2 [2, 0, 2] [3, 4, 1] [4, 6, 2] [5, 5, 3]
u3 [3, 1, 5] [4, 4, 4] [5, 5, 5] [6, 6, 4]
u4 [4, 1, 4] [5, 5, 5] [6, 6, 6] [7, 9, 7]

更改是通过 for 应用它,我想找到更高效的东西,可能是 groupby、eval、applymap 或其他东西。

最佳答案

使用GroupBy.agg按列名称:

df1 = df.groupby(level=0, axis=1).agg(lambda x: x.tolist())
print (df1)
a b c d
userId
u1 [1, 4, 1] [2, 2, 2] [3, 3, 3] [4, 4, 4]
u2 [2, 0, 2] [3, 4, 1] [4, 6, 2] [5, 5, 3]
u3 [3, 1, 5] [4, 4, 4] [5, 5, 5] [6, 6, 4]
u4 [4, 1, 4] [5, 5, 5] [6, 6, 6] [7, 9, 7]

关于python - 如何更改某些行以在数据框中列出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56457821/

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