pandas 在Python中使用列值按比例分割数据

o3imoua4  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(285)

假设我们有一个表,其中有A列和B列。B是A列中的值的计数。例如,
| 色谱柱A|B栏|
| - ------|- ------|
| 一千|二十三|
| 二○ ○ ○年|五十|
| 四千|二十个|
| 七千|七十|
| 三千|六十四|
如何拆分B列8:1:1比例的数据。
示例:B为23。因此,B的8:1:1将为~18,2,3。将有18行用于训练,2行用于测试,3行用于值。
类似地,20的8:1:1等于16,2,2。
预期输出表:
| 色谱柱A|B栏|C栏|
| - ------|- ------|- ------|
| 一千|1个|火车|
| 一千|。|火车|
| 一千|。|火车|
| 一千|十八|火车|
| 一千|1个|试验|
| 一千|第二章|试验|
| 一千|1个|瓦尔|
| 一千||瓦尔|
| 一千|三个|瓦尔|
| 二○ ○ ○年|1个|火车|
| 二○ ○ ○年|。|火车|
| 二○ ○ ○年|四十|火车|
| 二○ ○ ○年|1个|试验|
| 二○ ○ ○年|。|试验|
| 二○ ○ ○年|五个|试验|
| 二○ ○ ○年|1个|瓦尔|
| 二○ ○ ○年|。|瓦尔|
| 二○ ○ ○年|五个|瓦尔|
| 四千|1个|火车|
| 四千|。|火车|
| 四千|。|火车|
| 四千|十六|火车|
| 四千|1个|试验|
| 四千|第二章|试验|
| 四千|1个|瓦尔|
| 四千|第二章|瓦尔|
| 三千|1个|火车|
| 三千|。|火车|
| 三千|五十一|火车|
| 三千|1个|试验|
| 三千|。|试验|
| 三千|。|试验|
| 三千|六个|试验|
| 三千|1个|瓦尔|
| 三千|。|瓦尔|
| 三千|七|瓦尔|
不久,我想使用列B的值按8:1:1的比例拆分train、test、val集合中的行。
我试着用Pandas来计算上面提到的行的总数,但是我不能把计数分解成比率。

but5z9lq

but5z9lq1#

def spliter(NUM):
  lst = []
  lst.append(int(NUM*0.8))
  lst.append(int(NUM*0.1))
  lst.append(int(NUM*0.1))
  turn = 2
  while(lst[0]+lst[1]+lst[2] != NUM):
    lst[turn] = lst[turn] + 1
    if turn == 0:
      turn = 1
    elif turn == 1:
      turn = 2
    elif turn == 2:
      turn = 0
  return(lst)
print(spliter(23))

输出:

[18, 2, 3]

如果这是你的 Dataframe :

import pandas as pd
data = {
    'Column A' : [1000,2000,4000,7000,3000],
    'Column B'  : [23,50,20,70,64]
}
df1 = pd.DataFrame(data)
print(df1)

输出:

Column A  Column B
0      1000        23
1      2000        50
2      4000        20
3      7000        70
4      3000        64

我们可以通过以下方式获得所需的 Dataframe :

df2 = [[],[],[]]
for index,row in df1.iterrows():
  lst = spliter(df1['Column B'][index])
  for i in range(1,lst[0]+1):
    df2[0].append(df1['Column A'][index])
    df2[1].append(i)
    df2[2].append('Train')
  for i in range(1,lst[1]+1):
    df2[0].append(df1['Column A'][index])
    df2[1].append(i)
    df2[2].append('Test')
  for i in range(1,lst[2]+1):
    df2[0].append(df1['Column A'][index])
    df2[1].append(i)
    df2[2].append('Val')

df3 = pd.DataFrame(columns = ['Column A','Column B','Column C'])
df3['Column A'] = df2[0]
df3['Column B'] = df2[1]
df3['Column C'] = df2[2]
print(df3)

输出:

Column A  Column B Column C
0        1000         1    Train
1        1000         2    Train
2        1000         3    Train
3        1000         4    Train
4        1000         5    Train
..        ...       ...      ...
222      3000         3      Val
223      3000         4      Val
224      3000         5      Val
225      3000         6      Val
226      3000         7      Val

[227 rows x 3 columns]

相关问题