hello 请教下
如何对两列数据遍历不同的值得到的统计值形成一个dataframe
谢谢,具体目的是想实现下图左侧到右侧的结果
能否帮忙写下具体的代码,非常感谢!
多行统计,将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)
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)