pandas Python panda-将groupby输出写入文件

laik7k3q  于 2022-11-20  发布在  Python
关注(0)|答案(3)|浏览(287)

我使用以下方法获取数据的比例信息:

>>>testfile = pd.read_csv('CCCC_output_all_FINAL.txt', delimiter="\t", header=0)
>>> testdf = pd.DataFrame({'Proportion': testfile.groupby(('Name','Chr','Position','State')).size() / 39})
>>> testdf.head(5)
                                        Proportion
Name    Chr Position  State           
S-3AAAA 16  27557749  4        0.025641
                                    5        0.076923
                                    6        0.025641
S-3AAAC 15  35061490  2        0.076923
                                    4        0.025641

>>> testdf.to_csv('CCCC_output_summary.txt', sep='\t', header=True, index=False)

输出文件只有Proportion列。我希望输出下表:

Name    Chr    Position     State     Proportion
S-3AAAA  16     27557749     4         0.025641
S-3AAAA  16     27557749     5         0.076923
S-3AAAA  16     27557749     6         0.025641
S-3AAAC  15     35061490     2         0.076923
S-3AAAC  15     35061490     4         0.025641

把Pandas的输出写到这样的文件中可能/容易吗?

e5nszbig

e5nszbig1#

使用reset_index()

testdf.reset_index().to_csv('CCCC_output_summary.txt', sep='\t', header=True, index=False)
vjrehmav

vjrehmav2#

我遇到了同样的问题。上面解释的reset_index()对我不起作用。我用了另一个Stackoverflow的答案,它工作得很好。详细信息如下。
输入csv在以下两列中包含数据:物料代码,数量
所需输出:按物料分组的平均数量,两列都是csv的一部分。
初始代码:

import pandas as pd

data_directory = os.path.join("D:\\data")
df = pd.read_csv(os.path.join(data_directory, "input_file.csv"))

df_avg = df.groupby("Item Code")["Quantity"].mean()
df_avg.reset_index().to_csv(os.path.join(data_directory,'output_file.csv'), sep='\t', header=True, index=False )

收到的输出:只有平均数量被写入输出文件
以下代码解决了该问题:

import pandas as pd

data_directory = os.path.join("D:\\data")
df = pd.read_csv(os.path.join(data_directory, "input_file.csv"))

df.groupby("Item Code")["Quantity"].mean().reset_index()[["Item Code", "Quantity"]].to_csv(os.path.join(data_directory,'output_file.csv'))

通过上面的代码,我得到了输出文件,其中有两列:项目代码和数量,第二列包含每个项目代码的平均数量。
其他堆栈溢出引用:Pandas groupby to to_csv

k97glaaz

k97glaaz3#

最近,我不得不处理一个有两列的Excel文件,标题为“Dog Breed”和“Dog Name”。我想出了下面的代码(用Python 3.11.0测试),它使用groupby()并将分组数据打印到.csv文件中。

from pathlib import Path
import pandas as pd

p = Path(__file__).with_name('data.xlsx')
q = Path(__file__).with_name('data-grouped.csv')

df = pd.read_excel(p)
groups = df.groupby('Dog Breed', sort=False)

with q.open('w') as foutput:
for g in groups: # For each group
    foutput.write(f"{g[0]}, {len(g[1])}") # Record the number of dogs in each group
    for e, (index, row) in enumerate(g[1].iterrows()): # Iterating over the group's dataframe
        name = str(row['Dog Name'])
        if(e == 0):
            mystr = f",{name}\n"
        else:
            mystr = f",,{name}\n"
        foutput.write(mystr)

data.xlsx:

data-grouped.csv:

相关问题