小编kso*_*all的帖子

熊猫将数据框与共享列合并,fillna在左与右

我正在尝试合并两个数据帧,并用右df替换左df中的nan,我可以用以下三行代码来做到这一点,但是我想知道是否有更好/更短的方法?

# Example data (my actual df is ~500k rows x 11 cols)
df1 = pd.DataFrame({'a': [1,2,3,4], 'b': [0,1,np.nan, 1], 'e': ['a', 1, 2,'b']})
df2 = pd.DataFrame({'a': [1,2,3,4], 'b': [np.nan, 1, 0, 1]})

# Merge the dataframes...
df = df1.merge(df2, on='a', how='left')

# Fillna in 'b' column of left df with right df...
df['b'] = df['b_x'].fillna(df['b_y'])

# Drop the columns no longer needed
df = df.drop(['b_x', 'b_y'], axis=1)
Run Code Online (Sandbox Code Playgroud)

python merge dataframe pandas

9
推荐指数
2
解决办法
774
查看次数

Pandas:按索引计算细胞频率

我的数据框是一长串 4 个字母'A', 'T', 'G','C',我需要按索引计算每个字母的频率

df = pd.DataFrame({'cases': ['ACCTTGTAGTGTATTTTATGACCAAATGACTTTTTCCCCCCAGTGGCTAATTTGTCTCAGGCCTGCGTCTTAAAGAGACACGGTAATGAGTAGGAAGTCCAGCGTGGTCTGGA','ACCTTGTACTGTATCTTATGACCAGATGACTTTTTCCACCCAGTGGCTAATTTGTCTCAGGCCTCCGTCTTAAAGAGACACGGTAATGAGTAGGAAGTCCAACGTGGTCTAGA','GCCTTGTACTGTATATTATGACCAAATGACTTTTTCCACCCATTGGCTAATTTGTCTCAGGCCTCCGTCTTAAAGAGACACGGAAATGAGTAGGAAGTCCAGCGTGGTCTAGA','ACCTTGTACTGTATATTATGACCAGATGACTTTTTCCACCCAGTGGCTAATTTGTCTCAGGCCTCCGTCTTAAAGAGACACGGTAATGAGTAGGAAGTCCAGCGTGGTCTAGA']})
Run Code Online (Sandbox Code Playgroud)
                                               cases
0  ACCTTGTAGTGTATTTTATGACCAAATGACTTTTTCCCCCCAGTGG...
1  ACCTTGTACTGTATCTTATGACCAGATGACTTTTTCCACCCAGTGG...
2  GCCTTGTACTGTATATTATGACCAAATGACTTTTTCCACCCATTGG...
3  ACCTTGTACTGTATATTATGACCAGATGACTTTTTCCACCCAGTGG...
4  ACCTTGTACTGTATATTATGACCAGATGACTTTTTCCACCCAGTGG...
5  ACCTTGTAGTGTATTTTATGACCAAATGACTTTTTCCCCCCAGTGG...
6  ACCTTGTACTGTATCTTATGACCAGATGACTTTTTCCACCCAGTGG...
7  GCCTTGTACTGTATATTATGACCAAATGACTTTTTCCACCCATTGG...
8  ACCTTGTACTGTATATTATGACCAGATGACTTTTTCCACCCAGTGG...
9  ACCTTGTACTGTATATTATGACCAGATGACTTTTTCCACCCAGTGG...
Run Code Online (Sandbox Code Playgroud)

结果将是一个新的 df 形状4x113,我想不出一个熊猫的方法来做到这一点。以下是我的非熊猫解决方案

def freq_lists(dna_list):
    n = len(dna_list[0])
    A = [0]*n
    T = [0]*n
    G = [0]*n
    C = [0]*n
    for dna in dna_list:
        for index, base in enumerate(dna):
            if base == 'A':
                        A[index] += 1
            elif base == 'C':
                C[index] += 1
            elif base == …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

8
推荐指数
2
解决办法
166
查看次数

将包含字典的 pandas 列转换为多行

我有这个数据框

temp = pd.DataFrame({'Person': ['P1', 'P2'], 'Dictionary': [{'value1': 0.31, 'value2': 0.304}, {'value2': 0.324}]})

  Person                    Dictionary    
0  P1  {'value1': 0.31, 'value2': 0.304}
1  P2                  {'value2': 0.324}
Run Code Online (Sandbox Code Playgroud)

我想要这种格式的输出:

temp1 = pd.DataFrame({'Person': ['P1', 'P1', 'P2'], 'Values_Number': ['value1', 'value2', 'value2'], 'Values': [0.31, 0.304, 0.324]})
Run Code Online (Sandbox Code Playgroud)

我尝试使用这个:

temp['Dictionary'].apply(pd.Series).T.reset_index()
Run Code Online (Sandbox Code Playgroud)
  Person Values_Number  Values
0     P1        value1   0.310
1     P1        value2   0.304
2     P2        value2   0.324
Run Code Online (Sandbox Code Playgroud)

但我无法将其与之前的数据框连接起来。此外,我们也会有犯错误的机会。

python pandas

4
推荐指数
1
解决办法
961
查看次数

Pandas 使用 NaN 旋转或重塑数据框

我有这个数据框,我需要根据framecol旋转或重塑

df = {'frame': {0: 0, 1: 1, 2: 2, 3: 0, 4: 1, 5: 2}, 'pvol': {0: nan, 1: nan, 2: nan, 3: 23.1, 4: 24.3, 5: 25.6}, 'vvol': {0: 109.8, 1: 140.5, 2: 160.4, 3: nan, 4: nan, 5: nan}, 'area': {0: 120, 1: 130, 2: 140, 3: 110, 4: 110, 5: 112}, 'label': {0: 'v', 1: 'v', 2: 'v', 3: 'p', 4: 'p', 5: 'p'}}

当前数据框

frame   pvol    vvol    area    label
0       NaN     109.8   120 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
72
查看次数

Pandas将列中的数字提取到新列中

我目前有这个df,其中rect列是所有字符串.我需要将x,y,w和h从中提取到单独的列中.数据集非常大,所以我需要一种有效的方法

df['rect'].head()
0    <Rect (120,168),260 by 120>
1    <Rect (120,168),260 by 120>
2    <Rect (120,168),260 by 120>
3    <Rect (120,168),260 by 120>
4    <Rect (120,168),260 by 120>
Run Code Online (Sandbox Code Playgroud)

到目前为止,这个解决方案有效,但是你可以看到它非常混乱

df[['x', 'y', 'w', 'h']] = df['rect'].str.replace('<Rect \(', '').str.replace('\),', ',').str.replace(' by ', ',').str.replace('>', '').str.split(',', n=3, expand=True)
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?可能是正则表达式方法

python pandas

3
推荐指数
2
解决办法
748
查看次数

R ggplot - 如何在条形图上方旋转计数

我的数据框df看起来像这样

  Year Frequency
1 1975        86
2 1976        52
3 1977        53
4 1978        54
5 1979       301
6 1980       161
Run Code Online (Sandbox Code Playgroud)

您可以使用它自己重现 data.frame:

  Year Frequency
1 1975        86
2 1976        52
3 1977        53
4 1978        54
5 1979       301
6 1980       161
Run Code Online (Sandbox Code Playgroud)

我用以下方法绘制了这个图表

ggplot(ydf, aes(x = Year, y = Frequency, fill=Frequency)) + geom_bar(stat = "identity") + geom_text(aes(label = Frequency), nudge_y=1, check_overlap=TRUE)+ scale_x_discrete(guide = guide_axis(angle = 90))

在此输入图像描述

然而,正如您所看到的,条形上方的频率重叠。我尝试将 x 轴移开或像 xlabel 一样将频率旋转 90 度。我已经做了很多谷歌搜索,但没有运气。我对 R 还很陌生,所以我的绘图代码可能不正确或者可以做得更好。请注意,我喜欢图例显示为一个栏的方式,并且不想更改它。

r ggplot2

3
推荐指数
1
解决办法
574
查看次数

Pandas 基于多列的分组和转换

我见过很多类似的问题,但似乎没有一个适合我的情况。我很确定这只是一个 groupby 转换,但我一直在KeyError解决axis问题。我正在尝试 groupbyfilename并检查 count where pred != gt

例如,索引 2 是 so 1 的唯一索引f1.wav,索引 (13,14,18) 是f2.wavso 3 的唯一索引。

df = pd.DataFrame([{'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 2, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, {'pred': 0, 'gt': 0, 'filename': 'f1.wav'}, …
Run Code Online (Sandbox Code Playgroud)

python group-by transform dataframe pandas

3
推荐指数
1
解决办法
1408
查看次数

熊猫绘制一个线图,在列上有颜色变化

我的数据框

df = pd.DataFrame({'date': ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05'], 'b': ['a', 'a', 'b', 'b', 'c'], 'c': [1,2,3,4,5]})

         date  b  c
0  2018-01-01  a  1
1  2018-01-02  a  2
2  2018-01-03  b  3
3  2018-01-04  b  4
4  2018-01-05  c  5
Run Code Online (Sandbox Code Playgroud)

我想绘制一个折线图,其中 X 是date,y 是c并且线的颜色基于b. 对于此示例,应该有 3 种不同的颜色,只要它们不同,实际颜色就无关紧要。

我虽然会起作用,但它不允许按列更改颜色。

输出应该是一个行会改变颜色

python matplotlib pandas seaborn

2
推荐指数
1
解决办法
2898
查看次数

标签 统计

pandas ×7

python ×7

dataframe ×4

ggplot2 ×1

group-by ×1

matplotlib ×1

merge ×1

r ×1

seaborn ×1

transform ×1