python-3.x - 按特定顺序将数据框中的列收敛为单列
问题描述
这里的 Python newb,我在一个数据框中有两列,我们称它们为 dat1 和 dat2
dat1 dat2
0 123 20
1 456 30
2 789 10
3 123 10
4 456 20
5 789 30
我需要将其转换为单列,如下所示:
10
789
123
20
123
456
30
456
789
或者就列而言, [dat2,dat1,dat1,dat2,dat1,dat1,dat2,dat1,dat1] 我编造了这个可怕的代码:
unique = dp['dat2'].unique()
for each in unique:
mylist.append(each)
for x in dp:
mylist.append(dp[dp['dat2'] == each])
我得到如下输出
20
dat1 dat2
0 123 20
4 456 20
dat1 dat2
0 123 20
4 456 20
30
dat1 dat2
1 456 30
5 789 30
dat1 dat2
1 456 30
5 789 30
10
dat1 dat2
2 789 10
3 123 10
dat1 dat2
2 789 10
3 123 10
我基本上是在尝试在 excel 中复制数据透视表的功能。任何帮助将非常感激。
谢谢
解决方案
因为看起来您正在根据列 dat2 对值进行分组,并在每个 dat2 元素之后添加来自 dat1 的元素,所以我会使用 pd.groupby
import pandas as pd
dat1 = [123,456,789,123,456,789]
dat2 = [20,30,10,10,20,30]
df = pd.DataFrame(list(zip(dat1, dat2)), columns=['dat1', 'dat2'])
grouped = df.groupby(['dat2']).agg({'dat1':list}).reset_index()
dict_list = grouped.to_dict('records')
new_data_list = []
for single_dict in dict_list:
new_data_list.append(single_dict['dat2'])
new_data_list += single_dict['dat1']
print(new_data_list)
结果:
[10, 789, 123, 20, 123, 456, 30, 456, 789]
推荐阅读
- spring - Spring Batch:多个作者
- python - 从动态类中获取数据=“??????” 从 bs4
- java - 我在下面运行一个循环。它会自动跳过第一次运行并给我一个答案“无效条目”
- java - 使用带有 RecyclerView 的 Boom Menu 时应用程序崩溃
- html - 添加背景图像后,部分 CSS 将无法工作
- eclipse - 如何让 JETTY_BASE 与 Eclipse GWT 项目一起工作
- r - 当 Shiny App 部署在 Ubuntu 服务器上时,复制到剪贴板和下载处理程序不起作用
- r - 标签未显示在 R 中的 CoCA 上
- load-balancing - 在可变数量的服务器之间拆分流量的算法
- java - 如何检查 JDialog 是否已经在 Java 中打开?