多行统计值形成一个df

hello 请教下
如何对两列数据遍历不同的值得到的统计值形成一个dataframe
谢谢,具体目的是想实现下图左侧到右侧的结果

能否帮忙写下具体的代码,非常感谢!

img

img

多行统计,将dateframe转为右边要求的格式,代码如下:

import pandas as pd

df = pd.DataFrame([['899BB','prehea',27.5],
                  ['899BB','PL5',28],
                  ['899BB','PL5',30],
                  ['899BB','PL5',32],
                  ['343AC','PL5',8],
                  ['343AC','PL5',9],
                   ['343AC','PL5',10]],columns=['name','step-n','param1'])
print(df)
df = df.groupby(['name','step-n']).agg({'param1': [ 'min', 'max']})
df.columns = df.columns.map("".join)
print(df)

我感觉可以利用行遍历,遍历过程中用用dict、list记录每个name对应的多列,涉及一个求最大值、最小值(主要就是列名和列值)。最后转换一下数据结构。首先想到的就是这样,可能比较笨。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
假设你已经有了两列数据:A和B,需要统计不同组合下的数量和平均值。可以使用pandas库中的groupby函数实现:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 3], 'B': [4, 5, 6, 7, 8, 9]})

# 按照A和B列分组,并统计每组中B列的数量和平均值
result = df.groupby(['A', 'B']).size().reset_index(name='count')
result['mean_B'] = df.groupby(['A', 'B'])['B'].mean().values

# 输出结果
print(result)

上述代码中,先构造了一个示例数据集df,包含两列A和B。然后使用groupby函数按照A和B列进行分组,并使用size函数统计每组中B列的数量,再使用mean函数计算每组中B列的平均值。最后,将结果存储到一个新的dataframe中,并输出结果。

运行上述代码,可以得到以下输出结果:

   A  B  count  mean_B
0  1  4      1     4.0
1  1  5      1     5.0
2  2  6      1     6.0
3  2  7      1     7.0
4  3  8      1     8.0
5  3  9      1     9.0

可以看到,输出结果包含了每个不同组合下的数量和平均值。
如果我的回答解决了您的问题,请采纳!

df = pd.DataFrame([['899BB','Prehea',27.5],
                  ['899BB','PL5',28],
                  ['899BB','PL5',30],
                  ['899BB','PL5',32],
                  ['343AC','PL5',8],
                  ['343AC','PL5',9],
                  ['343AC','PL5',10]],columns=['name','step_n','param1'])

df = df.pivot_table(index='name', columns='step_n', values='param1', aggfunc=[min, max])
df.columns = [f'{col[1]}_{col[0]}' for col in df.columns]
df = df.reset_index()
df = df.sort_index(axis=1, ascending=False)
print(df)

img

问题描述:
如何对两列数据遍历不同的值得到的统计值形成一个dataframe?
具体目的是想实现下图左侧到右侧的结果。
解决方案:
首先,我们需要对两列数据进行遍历,获取不同的值。可以使用 pandas 库中的 unique() 方法来实现。
然后,对于每个不同的值,我们需要统计出它们在两列数据中出现的次数。可以使用 pandas 库中的 value_counts() 方法来实现。
最后,将统计结果组成一个 dataframe,其中行索引为两列数据中的不同值,列索引为“列1”和“列2”。
下面是具体的代码实现:
python
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 获取两列数据中的不同值
col1_values = data['列1'].unique()
col2_values = data['列2'].unique()
# 统计每个不同值在两列数据中出现的次数
counts = []
for value1 in col1_values:
row_counts = []
for value2 in col2_values:
count = ((data['列1'] == value1) & (data['列2'] == value2)).sum()
row_counts.append(count)
counts.append(row_counts)
# 将统计结果组成一个 dataframe
df = pd.DataFrame(counts, index=col1_values, columns=col2_values)