使用熊猫将多个不同行的值添加到一行?

时间:2020-01-17 23:27:36

标签: python pandas dataframe

我们想将几行不同的值添加到一行中。在图像中,您可以看到我们想要做的一个例子,左边的数据(ABC列),右边的数据。

我们的数据集很大,因此想编写一个脚本。目前,我们有一个熊猫数据框。我们想将五行加到一。

有人有一个简单的解决方案吗?

Image (left what we have, right what we want)

4 个答案:

答案 0 :(得分:1)

您可以这样做:

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x, TreeNode y, TreeNode z) {
        val = x;
        left = y;
        right = z;
    }
}


class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums.length == 0) {
            return null;
        }

        TreeNode ans = helper(nums, 0, nums.length - 1);
        return ans;
    }

    public TreeNode helper(int[] nums, int start, int end) {
        if (start > end) {
            return null;
        }

        int mid = (start + end) / 2;

        TreeNode root = new TreeNode(nums[mid], null, null);
        root.left = helper(nums, start, mid - 1);
        root.right = helper(nums, mid + 1, end);

        return root;
    }
}

(pd.DataFrame([...]))中的[]表示第一行是以下数据->水平格式

答案 1 :(得分:0)

假设这是一个numpy数组。 (如果是csv,则可以以numpy array的形式读入)

yourArray.flatten(order='C')

答案 2 :(得分:0)

这是您可以尝试的一种方式:

from itertools import product

# sample data
df = pd.DataFrame(np.random.randint(1, 10, size=9).reshape(-1, 3), columns=['X','Y','Z'])

   X  Y  Z
0  2  6  5
1  5  6  2
2  2  4  5

# get all values
total_values = df.count().sum()

# existing column name
cols = df.columns
nums = [1,2,3]

# create new column names
new_cols = ['_'.join((str(i) for i in x)) for x in list(product(cols, nums))]

df2 = pd.DataFrame(df.values.reshape(-1, total_values), columns=new_cols)

   X_1  X_2  X_3  Y_1  Y_2  Y_3  Z_1  Z_2  Z_3
0    2    6    5    5    6    2    2    4    5

答案 3 :(得分:0)

我会这样做:

import pandas as pd, numpy as np
df=pd.DataFrame(np.arange(1,10).reshape(3,3),columns=["X","Y","Z"])
print(df)

    X   Y   Z
0   1   2   3
1   4   5   6
2   7   8   9

dat = df.to_numpy()
d = np.column_stack([dat[:,x].reshape(1,dat.shape[0]) for x in range(dat.shape[1])])
pd.DataFrame(d,columns=(x+str(y) for x in df.columns for y in range(len(df)) ))
    X0  X1  X2  Y0  Y1  Y2  Z0  Z1  Z2
0   1   4   7   2   5   8   3   6   9