0

这里的 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 中复制数据透视表的功能。任何帮助将非常感激。

谢谢

4

3 回答 3

0

因为看起来您正在根据列 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]
于 2019-11-17T13:24:14.533 回答
0

使用 pd.concat 您可以连接数据帧数据

import pandas as pd
df={'id1':[11,22,33],'id2':[77,88,99]}
df=pd.DataFrame(df)
print(pd.concat([df['id1'],df['id2']]))
于 2019-11-17T12:59:09.120 回答
0
# sort the values by the second column
dp = dp.sort_values(by='dat2')


# create a list which will collect the results
my_data = []

# loop over the 2nd unique columns values
for d2 in dp.dat2.unique():
    # insert the data into the list
    my_data.append(d2)

    # grep the dat1 data from the table, where dat2 == d2
    for i in dp.dat1[dp.dat2 == d2]:
        my_data.append(i)


my_data
[10, 789, 123, 20, 123, 456, 30, 456, 789]
于 2019-11-17T13:06:47.483 回答